암호 안전성
Last updated
Last updated
암호 화폐를 한번이라도 거래 해보셨으면, 주소가 20자리 이상에 16진수(0~9, A~F까지)로 표현된다는 것을 알고 계실 겁니다. 전화번호와 같이 10자리 미만으로 주소를 설계하면 안될까요? 왜 이런 체계가 사용되는지 본편에서 알아보겠습니다.
암호 시스템은 암호 알고리즘과 암호키로 구성됩니다. 보통 암호 알고리즘은 상호 간의 약속이기 때문에 공개되므로, 암호에 대한 보안성은 오로지 암호키에 의존하게 됩니다. 마치 여러분의 스마트폰을 열어보지 못하는 것은 6자리의 비밀 번호를 모르기 때문인 것 처럼요.
그런데 스마트폰의 비밀 번호는 왜 6자리 일까요? 비밀 번호가 1자리 숫자일 경우, 누군가가 우연히 무작위로 선택한 번호가 1/10의 확률로 통과할 수도 있겠지요. 비밀 번호가 6자리 이면 1/100000의 확률에 대해서 맞춰야 하기 때문에 무작위 숫자 대입으로 정해진 기회안에 맞추기란 매우 어렵습니다. 이렇게 암호 시스템은 공격자의 시도 횟수 대비 암호키를 추정할 확률에 기반하여 안전성을 보장합니다.
스마트폰의 로그인 시도와 다르게, 정해진 횟수의 제한도 없고 공격자가 슈퍼컴퓨터를 가지고 대입해보는 경우에도 안전하려면 암호키가 얼마나 길어야 할까요? 암호 시스템의 안전성은 암호 알고리즘마다 조금씩 다르며, 어느 정도가 안전한 암호인지는 표준으로 정해져있습니다. 표준에서는 암호 알고리즘에 따라 최소 얼마 이상의 암호키 길이를 가진 암호를 써야 안전하다는 정보를 제공하며, 이를 따를 것을 권고하고 있습니다. 이런 표준 기관으로는 미국의 NIST가 대표적입니다.
전편에서 "내가 만든 개인키가 다른 사람이 만든 키와 동일해서 다른 누군가가 동일한 내 돈을 먼저 빼가는 일이 발생할 수 있을까?" 라는 질문을 하였는데요. 이런 일이 발생하지 않기 위해서 충분히 길이가 긴 암호키를 가진 시스템을 사용해야 합니다. 주소의 경우에도 서로 겹치지 않을 만큼 충분히 긴 해시 함수를 사용해서 생성해야겠지요. 블록체인에서는 해시 함수의 특징 중 하나인 충돌 저항성을 만족 시키기 위해서, 20자리 주소 체계와 같은 시스템을 사용하게 된 것입니다.
여러분이 사용하는 20자리의 숫자는 위의 질문을 충족시키고도 남을 만한 숫자입니다. 그렇기 때문에 불편하더라도 20자리 숫자만큼 긴 값을 주소로 사용을 하는 것입니다. 전 세계의 사람들이 아무리 많은 키를 생성하더라도, 여러분과 같은 키와 주소를 생성할 일은 없습니다. 하지만 이런 주소의 사용은 사람이 직접 식별하는 불편함 때문에, 이를 대신할 수 있는 QR code를 많이 사용합니다. 그래도 뒤에서 이런 일들이 일어나고 있구나 라는 것을 이해한다면, 좀 더 거래할 때 신중하고 안전하게 사용할 수 있을 거라고 생각합니다.
지금까지 블록체인을 구성하는 암호의 기본적인 내용들을 다루어 보았습니다. 블록체인으로 인해 탈중앙화 환경에서 사용되는 암호에도 많은 발전이 있었는데요. 대표적인 사례인 영지식 증명과 같은 암호 기술도 추후에 다룰 예정이니 많이 찾아주시면 감사하겠습니다.