이러한 옵션은 모두 매우 안전하지 않기 때문에 다른 옵션보다 낫거나 나쁜 것은 없습니다. 옵션 4를 사용하겠습니다.
SRAM은 키를 보관하기에 가장 안전한 장소이지만 외부에서 키를 주입해서는 안됩니다. 부팅하는 동안 항상 프로세서 내에서 생성되어야합니다. 다른 작업을 수행하면 나머지는 즉시 무효화됩니다. 자동으로 안전하지 않습니다.
비 휘발성 메모리에 키를 저장하지 마십시오. EEPROM 또는 플래시 메모리가 읽히지 않도록 보호하는 것은 중요하지 않습니다. 이 코드 읽기 보호 퓨즈는 쉽게 반전됩니다. 공격자는 제거해야합니다 (실리콘 다이 내부에 노출되도록 검은 에폭시 포장을 제거하거나 화학적으로 에칭). 이 시점에서, 이들은 비 휘발성 메모리 셀인 다이 부분 (이 섹션은 매우 규칙적이며 개별 메모리 셀은 크기가 매우 작지만 더 큰 구조 일 수 있음)과 작은 부분을 덮을 수 있습니다. UV에 불투명 한 부분은 해당 부분에 가려져 있습니다. 그런 다음 공격자는 5-10 분 동안 칩에 UV 광선을 비추고 CRP 퓨즈를 포함한 모든 퓨즈를 재설정 할 수 있습니다. 이제 표준 프로그래머가 OTP 메모리를 읽을 수 있습니다.
또는 그들이 자금을 잘 모으면 (예를 들어, 열쇠를 누군가에게 1000 달러 이상 가져가는 등), 여러 유형의 전자 현미경으로 메모리 셀을 직접 읽을 수 있습니다.
보안을 유지하려면 숨기지 말고 키를 지워야합니다.
- 아니요, 위와 같은 이유로 말입니다.
이제 옵션 4로 넘어갑니다.
- 암호화 만 사용하십시오. 키 분배는 해결 된 문제입니다. 따라서 즉시 사용 가능한 솔루션을 사용하십시오. 칩은 RNG를 사용해야하며, 충분한 엔트로피를 공급할 수 있도록 다양한 기타 사항을 고려해야하며, 부트 로더는 필요한 비밀 키를 생성하는 프로그램으로 직접 부팅해야합니다. 레지스터와 SRAM으로 직접 이동하여 지울 때까지 유지됩니다.
그러나 CPU를 제외하고는 비밀 키가 무엇인지 전혀 모른다는 문제가 있습니다. 문제 없습니다 : 공개 키 암호화를 사용하십시오. OTP 메모리에 저장 한 것은 공개 키입니다. 이 키는 누구나 읽을 수 있으며 스택 교환에 게시 할 수 있으며 5 피트 높이의 문자로 유조선 측면에 페인트 할 수 있습니다. 공개 키 암호화의 놀라운 점은 비대칭이라는 것입니다. 무언가를 암호화하는 키는 해독 할 수 없으며 개인 키가 필요합니다. 반대로, 공개 키로 암호화 된 것을 해독하는 키는 무언가를 암호화하는 데 사용될 수 없습니다. 따라서 CPU는 비밀 키를 생성하고 저장된 공개 키를 사용하여 비밀 키를 암호화 한 다음 USB 또는 RS232 또는 원하는대로 전송합니다. 비밀 키를 읽으려면 개인 키가 필요합니다. 칩에 저장, 전송 또는 전혀 관여 할 필요가 없습니다. 비밀 키가 개인 키 (칩 외부의 다른 곳)로 해독되면 설정됩니다. 앞에서 언급했듯이 공개 키를 제외한 다른 것을 저장하지 않고 칩 내에서 완전히 생성 된 안전하게 전송 된 비밀 키가 있습니다.
이 프로세스를 공식적으로 키 협상이라고하며 모든 것이 사용합니다. 오늘 여러 번 사용했습니다. 처리 할 수있는 많은 리소스와 라이브러리가 있습니다. 아무 것도 키를 '주입'하지 마십시오.
마지막으로 언급 할 사항 : AES 키는 전원 공급 장치에 앉아 전류 소모의 미세한 변화와 CPU의 비트 플립으로 인한 변화 사이의 타이밍을 측정하는 사이드 채널 공격을 사용하여 쉽게 복구 할 수 있기 때문에 문제가됩니다. 레지스터로. 이는 AES (또는 사용 가능한 매우 작은 암호화 알고리즘 중 하나)가 어떻게 작동하는지에 대한 지식과 결합하여 키를 복구하는 것이 상대적으로 쉽고 저렴합니다. 키를 읽을 수는 없지만 키 공간을 255 개의 가능한 키와 같이 엄청나게 작은 것으로 좁힐 수 있습니다. 이 칩은 상류이기 때문에이를 감지 할 수 없습니다.
이것은 '보안'암호화 프로세서에서 AES-256 암호화 부트 로더를 물리 쳤으며 그렇게 어렵지는 않습니다. 내가 아는 한,이 공격에 대한 진정한 하드웨어 대응책은 없습니다. 그러나 암호화 알고리즘 자체이며 비트를 뒤집기 위해 CPU가 필요한 방식으로 인해이 취약점이 발생합니다. 사이드 채널 저항 또는 사이드 채널 증명 알고리즘을 개발해야 할 것으로 생각합니다.
따라서 현재로서는 임베디드 장치에 키를 안전하게 저장하거나 임시 키를 사용하는 방법에 대한 진정한 해답은 다음과 같습니다 .
그러나 적어도 옵션 4의 키 협상을 사용하여 매번 새 키를 생성하는 경우 사이드 채널 공격은 사용중인 채널의 키만 손상시킬 수 있으며 데이터를 암호화하는 동안 전원을 모니터링해야하는 시간이있는 경우에만 가능합니다 . 내부적으로 생성 된 새 키를 자주 협상하는 경우 유용한 보안이 제공 될 수 있습니다.
키를 생성하고 가능한 한 짧은 시간 동안 저장하십시오.