Basic Security Principles
From the comments to my first post I've learned that there are different perception of security. Therefore I decided to explain when I call a system to be secure. In general security tries to reach following goals:
- confidentiality
- integrity
- availability
- and sometimes non repudiation
What does this mean? For short (longer explanation at Wikipedia):
Confidentiality means that I am able to keep the data secret. As important is integrity - make sure that nobody (else) is able to alter the data. But this is all of limited value if authorized persons can not access the data. Therefore we need to ensure availability. And non repudiation makes sure that we can proof who has sent us that data we are looking at.
One solution to all but availability is cryptography.
Cryptograpy
In information security a cryptosystem should honour Kerckhoffs's Principle which states:
A cryptosystem should be secure even if everything about the system, except the key, is public knowledge.
This even includes - under some of the attack models - some or all secret messages sent in the past (cf Known-plaintext attack) along with the corresponding encryption. This can even be taken further: the attacker is allowed to craft the messages to be encrypted (cf Chosen-plaintext attack). There are more attack models of which one is of general importance: Brute-force attack. Brute force is always leading to decryption and / or revelation the key. Therefore we have to choose key lengths such that an attacker needs an infeasible amount of resources to do so. A cryptosystem is broken if there exists an attack which performs better than brute force. Even cryptosystems which are broken can be practically secure if within the time the message should be kept secret the most powerful adversary has a negligible probability of successfully mounting the best available attack.
Example:
I want to keep my weather forecast for tomorrow secret. I of course will share the forecast with my family members. The only others who are interested in my weather forecast are my neighbours - all others get more accurate forecast from other sources. So a encryption which takes a usual home computer one year to break with brute force is - for this scenario - practically secure. If I want to encrypt state secrets with the same crypto it most likely won't be considered to be secure.
Since in most scenarios adversaries are much more powerful than yourself cryptosystems are designed to be exponentially more difficult to break than to do the encryption. While a 128 bit key is only double the size of a 64 bit key, a brute force attack has to try every one of the 2^128 keys which is 2^64 times the workload as for the 64 bit key! So if do not feel secure enough anymore you double the key size which increases your encryption time by a factor of 2 and increase the time it takes an attacker by the factor of 2^64 ≈ 2*10^20 or 2 times ten billion times ten billion (a 2 followed by 20 zeros). This is the kind of advantage you want!
This also rules out a popular strategy by non-security folks: Security trough obscurity.
When taking about security you usually have at least one person asking "What if I do not tell them HOW I did the encryption? That makes the whole brut force thing absolutely impossible since nobody has the code!"
That, of course is not true. Code or hardware implementations can be reverse engineered or observed and with enough knowledge time and patience somebody will come up with the right solution. While this is a lot more complicated than just using an available implementation and start right away with brute forcing, it also makes YOR life much more complicated. I. e. you never know how much harder breaking your "crypto" is than en- / decoding and thus how much time you got until your secret is known. For proper cryptograpy it is just simple math as shown above.
That been said I do not get why Atmel puts its secure boot documentation under NDA.
Top Comments