우연한 기회로 Klaytn 개발팀의 Colin 님을 Zoom을 통해 만나 뵐 수 있는 기회가 있었다.
그때 내가 Colin 님에게 질문했다.
유저의 Private key를 어떻게 안전하게 저장할 수 있나요?
Password처럼 그저 hashing 하여 DB에 저장하기엔 private key는 sign과 같은 작업이 이후에 필요할 수도 있어서 hashing 하는 건 아니라고 생각했습니다.
그러자 Colin 님이 답해줬다.
(정확히 아래와 같이 답한 것은 아니다. 내가 답변에 대해서 이렇게 이해했다는 것이다)
정말 많은 방법이 있겠지만 HSM과 같은 module을 사용할 수 있겠습니다.
AWS에서 cloud 형식으로 HSM을 제공하니깐 그것을 사용해도 좋겠습니다.
또한 다른 방법으로는 비밀번호를 이용하여 같은 주소가 나오게끔 유도할 수도 있겠습니다.
HSM(Hardware Security Module)이 뭔지 몰랐기 때문에 이것에 대해 먼저 알아봤다.
아래 링크에서 HSM에 대한 설명이 기가 막히게 잘돼있었다.
먼저 HSM의 본격적인 설명에 앞서 가정을 하겠다.
개개인의 SSN(Social Security Number; 주민등록번호 비슷한 거라고 생각하면 된다.)을 암호화한 상태로 DB에 저장한다고 가정하자.
즉, 개개인의 SSN을 암호화한 Cipher Text를 DB에 저장한다는 말이다.
Case 1은 encryption, decryption에 사용될 key가 service(예를 들면 server)에 저장된 상황이다.
이때 service가 공격당하면 key 또한 안전하지 않은 상태가 된다.
그러므로 공격자는 이 탈취한 key를 통해 SSN의 복호화가 가능하게 되고, 결론적으로 모든 개인정보가 안전하지 않게 된다.
Case 2는 encryption, decryption에 사용될 key가 HSM에 저장된 상황이다.
Key는 HSM에 저장되어 있고, HSM에 cipher text를 주면 HSM은 decryption 하여 기존의 SSN을 반환한다.
이러한 방식 때문에 key를 더 안전하게 관리할 수 있다고 한다.
그래서 HSM을 사용한다고 뭐가 더 안전한 건데?
영상에서 computer는 large surface area of attack을 가졌다.
하지만 HSM은 low surface area of attack을 가졌다고 한다.
더 자세히 설명하자면 computer는 정말 많은 각자의 목적을 가진 SW, HW로 이루어져 있는데, 이렇게 목적이 보안이 아닌 다른 것이라면 보안 측면에서 약할 수도 있다.
하지만 HSM의 목적은 오직 key를 안전하게 저장하고, 관리하는 것이다.
그 때문에 다른 component보다 HSM은 key를 안전하게 저장하고, 관리하는 기능에 대해 최적화(?)하는 부분에 있어서 수월하고, 우수한 것이다.
HSM이란 말 그대로 하드웨어 장치인데 암호키를 안전하게 저장하고 관리하는 장치이다.
HSM은 대표적으로 4가지의 기능을 제공하는 HW이다.