PCB 설계를 쉽게 리버스 엔지니어링하고 마이크로 컨트롤러에서 .hex 파일을 추출 할 수있는 중국 기업이 많기 때문에 보안 플래시), 임베디드 개발자는 제품에 더 많은 보호 기능을 추가해야합니다. 제 경우에는 STM32F103을 사용하고 있고 제 PCB에 암호화 IC ATSHA204A 를 추가하여 제 IP를 보호하고 싶습니다. 이렇게함으로써 저는 MCU에서 .hex를 가져와 보드를 복제 할 수 있어도 PCB에서 암호화 칩을 인식 할 수 없으면 hex 파일이 작동하지 않습니다.
이 암호화 IC에는 고유 한 일련 번호가 있습니다. 제작 중에 작성되었으며 항상 읽을 수 있습니다. 또한 일부 비밀 데이터를 보관하는 보안 영역, 난수를 생성하여 I2C 또는 단선을 통해 호스트로 전송하는 기능, 특정 문자열의 SHA-256 해시를 계산하는 기능 등과 같은 일부 기능이 있습니다.
이제 인증 주체에 대한 멍청한 사람이기 때문에 어떻게 작업해야하는지 이해하려고합니다. 데이터 시트를 읽고 이해 한 바에 따르면 워크 플로는 다음과 같습니다.
암호화 IC의 개인화 :
-
암호화의 보안 영역 칩은 호스트 (제 경우 STM32F103)에 의해 각 제품에 대한 임의의 비밀 키로 한 번만 채워집니다.
-
비밀 키는 호스트 플래시에도 표시됩니다. 메모리.
보드 인증 (내 이해는 틀린 것 같습니다) :
-
호스트가 임의의 숫자를 요청합니다. crypto-IC에서. 그런 다음 호스트는 비밀 키와 난수 (nonce?)로 연결된 문자열을 생성하고 그에 대한 SHA-256 해시를 계산합니다.
-
이제 호스트는 임의의 키를 crypto-IC로 되돌리고 crypto-IC 내부의 비밀 키를 사용하여 동일한 문자열을 생성하고 SHA-256 해시를 계산할 것으로 예상합니다.
-
Crypto-IC는 계산 된 해시를 호스트로 다시 보내고 호스트는 해시를 비교합니다.
-
해시가 일치하면 유효성을 검사합니다. 그렇지 않으면 호스트가 작업을 거부합니다.
워크 플로가 잘못되었을 수 있지만 주요 아이디어는 이와 유사한 것이어야합니다. 누구든지 설명 할 수 있나요?
답변
워크 플로가 잘못되었을 수 있지만 주요 아이디어는 이것에 가깝습니다.
아닙니다. 이것은 기본적으로 쓸모가 없습니다. 예를 들어 암호화 IC를 사용하여 애드온 장치 (예 : 카트리지가 같은 회사에서 제조되었는지 확인하는 프린터).
"<때문에 당신 에게 도움이되지 않습니다. / div> 작업을 거부합니다 "는 “누군가가 귀하의 펌웨어를 가지고 있으면 날아 가지 않습니다”기계어 코드 : 분해 된 기계어 코드에서 검사를 찾는 것은 일반적으로 그 em가 아닙니다. > 어렵습니다. 그런 다음 " “중지하고 아무것도 안 함”"을 " “시작”으로 이동 유용한 기능 “"; 일반적으로 여기에는 바이트 변경이 포함됩니다.
펌웨어의 관심 부분을 영구 저장소 (일반적으로 MCU의 내장 플래시)에 암호화해야합니다. 암호화 칩을 사용하는 부트 로더 만 주 펌웨어를 해독하려면 암호화되지 않은 상태로 유지됩니다. 부팅시 부트 로더는 펌웨어를 RAM으로 해독합니다.
작은 문제 : 하드웨어 측면에서 매우 영리해야합니다. MCU와 암호화 IC 사이에 로직 분석기를 연결하고 복호화 된 바이트를 스니핑하면됩니다.
물건을 해독하는 동안 메모리에서 격렬하게 뛰어 다니면서 사물을 난독 화하는 해결 방법이 있습니다. 문제는 아무것도 없다는 것입니다. 그 비밀은 기계 코드에서 점프하는 방법을 이해하는 데 약간의 작업이 더 필요합니다. (그리고 MCU가 일부 핀을 통해 전체 RAM을 스트리밍하도록하는 단일 기계 코드를 해당 버스에 삽입 할 수 있다면 게임이 끝납니다. 위치를 아는지 여부는 중요하지 않습니다. 해당 코드는 RAM에 저장되며 나중에 덤프에서 찾을 수 있으며 특정 시점에서 실행되는 것이 중요합니다.)
즉, 펌웨어를 정말로 생각한다면 상업적으로 흥미로운 점은 입니다 (사람들은 그것을 과대 평가합니다. 소비자 장치 및 산업 제어에 관한 것과 같이 주로 펌웨어가 아닌 경우에는 일반적으로 모든 부품을 소싱하고 구축하기가 어렵습니다. 동일 / 유사한 장치가 원래 장치보다 저렴하고 펌웨어를 완전히 다시 작성하는 것이 종종 그 장치에 비해 쉽습니다), 유일한 기회는 비밀 보관, 암호화 된 저장소 및 안전한 실행을 통합하는 것입니다 (RAM 덤핑이 불가능 함).
그렇게하는 마이크로 컨트롤러가 있습니다. 일반적으로 조금 더 비쌉니다.그러나 짐작할 수 있듯이 “예를 들어 펌웨어를”훼손 할 수 없음 “을 인증해야하는 방어 환경에있는 경우에는 그렇게 할 수 있습니다.
Nintendo는 누구도 펌웨어를 읽거나 수정하지 못하도록하는 재정적 인센티브가 강한 기기를 만듭니다.
사용자가 콘솔에서 Nintendo의 라이선스가없는 소프트웨어를 실행할 수 없다는 것은 비즈니스 모델에 매우 중요합니다. 따라서 게임의 서명 확인을 피할 수없는 것이 가장 중요하며, 이것이 Nintendo Switch가 여러 계층의 보호를 제공하는 이유입니다. 짐작할 수 있듯이, 그것은 보장 할 수 없습니다. 단순히 취미로하는 사람 (범죄 / 상업적 이해 관계가있는 사람도 아닙니다!)이 방법을 찾았습니다 .
하지만 한 가지 눈치 채 셨을 것입니다. 완벽하게 만드는 것이 어렵다고해서 장치를 복제하는 것이 더 어려워 질 가치가 없다는 것을 의미하지는 않습니다. 제 겸손한 경험에서, 복제자는 일반적으로 항복합니다. 복사를 위해 장치가 작동하는 방식을 이해해야합니다. 그렇지 않으면 “대부분의 작업을 수행 할 수있는 엔지니어를 확보 할 수 있으며 이러한 엔지니어는 일반적으로 일부 위조 실험실. 따라서 좋은 억제책은 펌웨어를 플래시로 암호화하는 것입니다. 완벽하지는 않지만 로직 분석기를 꺼내어 역 설계에 몇 주를 투자해야합니다. In-RAM 복호화 프로토콜은 그들이 복사 할 수있는 가능성 을 얻기 위해 재정적 위험이 너무 높다고 생각하고
댓글
- " 사람들은이를 과대 평가합니다. ",하지만 사람들은 리버스 엔지니어링 비용을 지나치게 과대 평가하고 있습니다.
- 훌륭한 답변 덕분에 평판이 충분하지 않다는 이유로 찬성 할 수 없습니다. 예, ' 기본적으로 100 % 보안을 유지하는 것은 불가능하지만 $ 0.3 암호화 칩으로 매우 간단한 보안 조치를 추가하면 리버스 엔지니어링 비용이 3 자리 $에서 다음으로 증가 할 수 있습니다. 보안이 충분히 영리하게 설계된 경우 필요한 시간을 며칠에서 몇 달로 늘리는 반면 5 자리 숫자 일 수도 있습니다. 그리고 해커를 격퇴 할 수 있습니다 (제품의 재정적 잠재력에 따라 다름) " 흥미로운 부분 " 메인 펌웨어의.
- ' 예상치를 " 시간을 1 시간에서 며칠이 걸릴 수도 있고 " 비용은 기본적으로 두 경우 모두 관련이 없습니다. 비용은 " 실질적으로 무료 "가 ' 전자 도구를 사용하는 모든 사람에게 부과됩니다. 아무튼, 그렇지 않더라도 200 유로와 노트북이 합리적 시작을 제공합니다.
- 그럼 포기하고 보호 장치를 전혀 사용하지 않아야합니까? 🙂
- @NotReallyaMaster는 ' 귀하에게 달렸습니다. 저는 '이 질문에 대한 제 답변의 마지막 단락 전체를 바쳤습니다.