메아리 저널

웹 사이트 가입이라거나 그런 걸 위해서 암호를 고를 때 그 안전성을 결정하는 것은 암호의 정보량1이다. 만약 암호를 만들 때 로마자 대소문자와 숫자를 사용할 수 있다면, 한 글자당 62가지 선택이 가능하므로 그 정보량은 log262 ~= 5.95비트이다. 따라서 이런 식으로 열글자 암호를 만들면 59.5비트의 정보량을 가지게 되고, 무작위로 암호를 찍으려고 할 경우 많으면 259.5회의 시도를 해야 한다. (평균은 당연히 그 절반인 258.5회이다.)

물론 이건 이론상으로 사람이 완벽하게 랜덤한 문자열을 만들 수 있다는 가정에 따른 것이다. 실제로는 사람의 행동은 굉장히 예측이 쉬운 편이며, 랜덤하게 만들었다고 생각해도 랜덤하지 않은 경우가 태반이다. 예시를 들자면, 옛날에는 난수표를 타자수가 손으로 쳤는데 타자수는 무의식적으로 왼손과 오른손을 번갈아가면서 치기 때문에 결과적으로 홀수번째 자리와 짝수번째 자리의 숫자의 분포가 다르게 되어 버렸다. (후대의 난수표는 이런 문제를 없애기 위해 기계적인 절차를 도입하였다.)

NIST의 가이드라인에 따르면, 사람이 아무 생각 없이 자기가 원하는 문자열을 암호로 선택할 경우 첫 글자는 4비트의 정보량을, 그 다음 일곱 글자는 글자당 2비트의 정보량을, 그 다음 열 두 글자는 1.5비트, 그 다음부터는 1비트의 정보량을 가진다고 한다. 이걸로 계산해 보면 열 글자 암호의 통상적인 정보량은 21비트(4+7×2+2×1.5)에 불과하게 되는데, 이건 로마자 대소문자와 숫자를 사용한 이상적인 암호로 치자면 네 글자짜리 암호(정보량 약 24비트)보다도 못 한 것이다. 따라서 안전한 암호를 정하려면 길이를 늘이거나 예상치 못 한 문자(특수문자나 의도적인 오타 등)를 사용해서 정보량을 늘려야 한다.


  1. 엄밀히 정의하면, 여기서 말하는 정보량(information gain)은 정보 엔트로피의 차이로 정의되며 “가능한 경우의 수”와는 다소 거리가 있는 개념이다. 하지만 대강 대충 쓰는 글이니만큼 대강 살기로 하자. 


텀블러를 씁니다.