하드웨어 보안 기초, Secure Boot와 PUF의 원리
아파트 단지에는 보통 세 겹의 문이 있습니다. 단지 정문의 경비실, 동 입구의 공동현관, 그리고 세대 현관입니다. 앞 문에서 확인을 마친 사람만 다음 문 앞에 설 수 있고, 마지막에는 열쇠를 가진 사람만 집 안에 들어갑니다.
칩의 보안도 이렇게 단계를 이어 가며 설계합니다. 전원이 들어오는 순간부터 아래 단계가 위 단계를 확인하는 구조이고, 이 글은 그 기본인 하드웨어 보안 기초를 Secure Boot와 PUF 중심으로 풀어 봅니다. 공격 방법이 아니라 방어의 원리와 구조만 다룹니다.
경비실과 다른 점도 있습니다. 칩에서는 사람이 지켜보며 판단하지 않고 코드와 키가 그 일을 하므로, 첫 번째 문을 지키는 코드가 바뀌지 않아야 한다는 조건이 무엇보다 중요합니다.
하드웨어 보안 기초, 믿음의 출발점이 칩 안에 있어야 하는 이유
운영체제의 권한 관리나 암호 라이브러리 같은 소프트웨어 보안은, 그 아래에서 실행되는 부트 코드와 하드웨어가 변조되지 않았다는 가정 위에 서 있습니다. 아래층이 바뀌어 있으면 위층의 보안 장치는 의미를 잃습니다.
그래서 가장 아래에 바꿀 수 없는 기준점을 두는데, 이것이 신뢰의 뿌리(Root of Trust)입니다. 칩 안에 고정해 둔 부팅 코드와 검증에 쓰는 키 정보가 여기에 해당합니다.
하드웨어 보안이 지키려는 목표는 보통 세 가지로 나눕니다. 코드와 데이터가 바뀌지 않았다는 무결성, 올바른 출처에서 왔다는 인증, 비밀이 새지 않는 기밀성입니다.
Secure Boot, 신뢰 사슬이 이어지는 순서
Secure Boot는 전원이 켜진 뒤 실행되는 코드를 한 단계씩 검증하며 넘어가는 부팅 방식입니다. 각 단계가 다음 단계를 확인하고 통과해야 실행권을 넘기므로 신뢰 사슬(Chain of Trust)이라고 부릅니다.
Secure Boot의 검증 순서
- 전원이 켜지면 칩 안의 Boot ROM이 가장 먼저 실행됩니다. 이 코드는 제조 단계에서 새겨져 이후에 바꿀 수 없습니다.
- Boot ROM이 외부 저장장치에서 다음 단계 부트로더를 읽어 디지털 서명을 검증합니다. 검증에 쓰는 공개키 또는 그 해시는 칩 안의 OTP에 들어 있습니다.
- 서명이 맞으면 부트로더를 실행하고, 맞지 않으면 부팅을 멈추거나 복구 절차로 넘어갑니다.
- 부트로더가 같은 방식으로 운영체제 커널의 서명을 검증합니다.
- 시스템에 따라 커널이 이후의 드라이버와 애플리케이션까지 검증을 이어 갑니다.
- 각 단계에서 이미지의 버전이 허용된 최소 버전보다 낮지 않은지도 함께 확인합니다.
마지막 단계의 버전 확인은 롤백 방지입니다. 취약점이 알려진 옛 버전도 당시에는 정상적으로 서명된 이미지라서 서명만 보면 통과할 수 있으므로, 허용 버전의 하한을 한 번 올리면 되돌릴 수 없는 카운터에 기록합니다.
사슬은 가장 약한 고리만큼만 튼튼합니다. 어느 한 단계가 검증을 건너뛰면 그 뒤의 모든 단계는 믿을 근거를 잃습니다.
디지털 서명이 확인하는 것과 확인하지 않는 것
디지털 서명은 이미지의 해시 값을 제조사의 개인키로 서명해 이미지에 붙여 두는 방식입니다. 칩은 저장해 둔 공개키로 서명을 확인하고, 이미지가 서명된 뒤에 한 비트라도 바뀌었다면 검증이 실패합니다.
개인키는 제조사의 안전한 시스템에만 있고 칩에는 공개키만 들어 있습니다. 그래서 칩에서 공개키가 읽히더라도 그것만으로는 올바른 서명을 새로 만들 수 없다는 점이 이 구조의 장점입니다.
다만 서명을 검증하면 펌웨어 내용이 보호된다는 생각은 흔한 오해입니다. 서명은 출처와 변조 여부를 확인할 뿐 내용을 가리지 않으므로, 내용을 숨기려면 암호화를 따로 적용해야 합니다.
기준값을 담아 두는 곳, OTP와 eFuse
검증의 기준이 되는 공개키 해시는 바뀌면 안 되는 값입니다. 이런 값은 한 번만 기록할 수 있는 OTP(One-Time Programmable) 메모리에 담으며, 그 방식 중 하나가 전류로 금속 연결을 끊어 비트를 기록하는 eFuse입니다.
OTP에는 공개키 해시 말고도 롤백 방지 카운터, 칩 고유 번호, 디버그 기능을 막는 설정 같은 값이 들어갑니다. 한 번 쓰면 되돌릴 수 없다는 성질이 곧 기준값이 변조되지 않는다는 보증이 되며, 이 점이 하드웨어 보안 기초에서 OTP가 빠지지 않는 이유입니다.
디버그와 테스트 인터페이스도 점검 대상입니다. 개발 중에는 칩 내부를 들여다보는 통로가 꼭 필요하지만, 양산품에서 열려 있으면 그 통로가 내부로 들어오는 경로가 될 수 있습니다. 그래서 양산 단계에서 OTP 설정으로 막거나 인증을 거친 경우에만 열도록 설계합니다.
PUF, 제조 편차로 만드는 칩의 지문
같은 마스크로 만든 칩도 문턱전압과 선폭 같은 미세한 제조 편차가 칩마다 조금씩 다릅니다. 이 편차를 읽어 칩마다 다른 고유값을 얻는 회로가 PUF(Physical Unclonable Function, 물리적 복제 불가 함수)이고, 사람의 지문에 빗댈 수 있습니다.
대표적인 예가 SRAM PUF입니다. 전원이 처음 켜질 때 SRAM 셀은 0이나 1 중 하나로 정해지는데, 셀을 이루는 두 인버터의 미세한 차이에 따라 어느 쪽으로 치우칠지가 셀마다 다르고, 그 패턴이 칩마다 다릅니다.
가상 8비트 예시, PUF 응답의 고유성과 재현성칩 A의 응답이 10110010, 칩 B의 응답이 01100111이라고 가정합니다. 두 응답은 8자리 중 5자리가 다릅니다.
칩 A를 다시 켰을 때 10110011이 나왔다면 첫 측정과 1자리만 다릅니다. 좋은 PUF는 칩 사이의 차이는 크고 같은 칩의 재측정 차이는 작아야 하며, 실제 PUF의 응답은 이보다 훨씬 깁니다.
활용은 칩의 고유 신원 확인과 키 생성입니다. 키를 메모리에 저장해 두지 않고 필요할 때마다 PUF 응답에서 만들어 쓰면, 전원이 꺼진 칩에서 키를 읽어 내기 어렵고 같은 칩을 복제하기도 어렵습니다.
PUF를 난수 발생기와 같은 것으로 보는 것은 매번 다른 값이 나와야 한다는 흔한 오해입니다. 난수 발생기는 호출할 때마다 달라야 하지만, PUF는 같은 칩에서 같은 응답이 재현되어야 쓸모가 있습니다.
그 재현성은 완벽하지 않습니다. 온도와 전압, 잡음, 노화에 따라 응답의 일부가 흔들리므로 오류 정정 부호와 보조 데이터를 함께 써서 응답을 안정된 키로 바꾸는 과정이 필요합니다.
보안 기능이 막으려는 위협의 종류
하드웨어 보안 기능은 막으려는 위협마다 대응 수단이 정해져 있습니다. 개념 수준에서 짝지어 보면 각 장치가 왜 필요한지가 정리됩니다.
위협과 대응 수단의 짝
- 펌웨어를 변조된 이미지로 교체: Secure Boot의 서명 검증으로 막습니다.
- 취약한 옛 버전으로 되돌리기: 롤백 방지 카운터로 막습니다.
- 복제품과 위조 칩: 칩 고유 번호와 PUF 기반 인증으로 구분합니다.
- 디버그 포트를 통한 내부 접근: 양산 시 OTP 설정으로 잠그거나 인증 후에만 엽니다.
- 전력이나 전자파 같은 부수 신호로 정보가 새는 부채널: 회로 설계 단계에서 신호 패턴이 비밀과 관련되지 않게 만듭니다.
어느 하나만으로 충분하다고 보지 않고 여러 겹으로 쌓는 것이 일반적인 설계 철학입니다. 한 겹이 뚫려도 다음 겹이 피해 범위를 제한하도록 만듭니다.
Secure Boot와 OTP와 PUF 비교 표
| 구분 | Secure Boot | OTP와 eFuse | PUF |
|---|---|---|---|
| 역할 | 부팅 코드를 서명으로 검증 | 기준값과 설정을 한 번만 기록해 보관 | 제조 편차에서 칩 고유값을 생성 |
| 지키는 것 | 실행 코드의 무결성과 출처 | 신뢰의 기준값과 보안 설정 | 칩의 고유 신원과 키 |
| 핵심 원리 | 해시와 디지털 서명, 공개키 검증 | 한 번 쓰면 바꿀 수 없는 비휘발성 기록 | 칩마다 다른 미세한 물리적 차이 |
| 한계 | 검증 기준이 되는 공개키가 바뀌지 않아야 함 | 주변 회로가 우회되지 않게 설계해야 함 | 응답이 흔들려 오류 정정이 필요함 |
| 놓치기 쉬운 점 | 서명은 암호화가 아님 | 한 번 쓰면 수정 불가라 입력 오류가 치명적 | 난수 발생기와 다름 |
핵심 정리
소프트웨어 보안은 아래층의 하드웨어를 믿는 데서 출발하므로, 바꿀 수 없는 Boot ROM과 OTP의 기준값에서 시작해 단계마다 서명을 검증하는 신뢰 사슬이 하드웨어 보안 기초의 뼈대입니다. 여기에 제조 편차에서 만든 칩의 지문인 PUF가 더해져, 키를 저장하지 않고도 고유한 신원과 키를 만들 수 있습니다.
아파트의 문이 세 겹으로 이어지듯 칩의 검증도 앞 단계가 뒤 단계를 보증하며 이어집니다. 다만 칩의 문지기는 사람이 아니라 변경할 수 없는 코드와 키이므로, 어떤 값을 바꿀 수 없게 고정하고 어떤 값을 검증에 쓸지 설계 초기에 정해 둬야 합니다.
면접 대비 질문
면접 대비 질문Secure Boot가 신뢰 사슬을 만드는 과정을 설명하고, PUF가 키를 저장해 두는 방식과 어떻게 다른지 말해 보세요.
[답변 포인트] 바꿀 수 없는 Boot ROM이 실행되고, OTP에 든 공개키 해시로 다음 단계 이미지의 서명을 검증한 뒤 실행권을 넘기는 과정이 반복된다고 설명합니다. 서명은 개인키로 만들고 칩에는 공개키만 있어 위조가 어렵다는 점, 서명은 암호화가 아니라 출처와 무결성 확인이라는 점, 롤백 방지 카운터가 필요한 이유를 덧붙입니다. PUF는 제조 편차에서 칩마다 다른 값을 만들어 키를 메모리에 저장하지 않고 필요할 때 생성한다는 점, 응답이 흔들려 오류 정정과 보조 데이터가 필요하고 난수 발생기와 성격이 다르다는 점으로 마무리하면 좋습니다.









