약한 키 (Weak Key)

고급암호학수정일

약한 키(weak key)는 특정 암호 알고리즘에서 그 구조 때문에 암호가 비정상적으로 약하게 동작하게 되는 특정 키 값입니다. 사람이 추측하기 쉬운 비밀번호를 뜻하는 것이 아니라, 알고리즘 설계상 예외적으로 나쁜 성질을 갖는 키를 가리킵니다.

자세히 알아보기

대표적인 예는 DES입니다. DES는 56비트 키에서 16개의 라운드 키(서브키)를 만들어 차례로 쓰는데, 키 일정의 구조 때문에 16개 라운드 키가 모두 같아지는 키가 4개 있습니다(16진수 0101010101010101, FEFEFEFEFEFEFEFE, E0E0E0E0F1F1F1F1, 1F1F1F1F0E0E0E0E. 패리티 비트 포함 표기). 이런 키로는 암호화를 두 번 하면 원래 평문이 그대로 돌아옵니다. 즉 암호화 함수가 자기 자신의 역함수가 됩니다.

이와 비슷하게 준약한 키(semi-weak key)는 DES에 12개, 6쌍이 있습니다. 각 키는 서로 다른 라운드 키를 두 개만 만들며, 한 쌍의 키 K₁, K₂에 대해 K₁로 암호화한 것을 K₂로 다시 암호화하면 평문이 돌아옵니다. 키 하나가 다른 키의 복호화 역할을 하는 셈입니다.

고전 암호에서는 평문을 전혀 바꾸지 않는 키가 같은 범주에 듭니다. 치환표가 원래 알파벳 순서 그대로인 치환 암호의 키, 문자를 한 자리도 옮기지 않는 전치 암호의 키(항등 치환)가 그렇습니다. 반면 알파벳을 한 칸씩 미는 키나 거꾸로 뒤집는 키는 고전 치환 암호 자체가 약하다는 문제이지 약한 키의 예가 아닙니다.

약한 키는 보통 전체 키 공간에서 아주 작은 비율입니다. DES의 약한 키와 준약한 키는 약 7.2 × 1016개 가운데 16개뿐이어서 무작위로 만든 키가 걸릴 확률은 매우 낮고, 필요하면 키를 만든 뒤 이 값들인지 확인해 걸러 낼 수 있습니다. 좋은 설계는 처음부터 모든 키가 똑같이 강하도록, 즉 약한 키가 없도록 키 일정을 만드는 것을 목표로 합니다.

블록체인·암호화폐에서는

타원곡선 서명에서도 비슷한 경계값이 있습니다. 비트코인과 이더리움이 쓰는 secp256k1에서 개인키는 1 이상이고 곡선 위수 n보다 작은 정수여야 하며, 0이나 그 범위를 벗어난 값은 유효한 키가 아닙니다. 지갑 소프트웨어는 난수로 키를 만든 뒤 이 범위를 검사합니다. 사람이 고른 쉬운 값(예: 1, 2처럼 작은 수)이나 짧은 문장에서 만든 키는 알고리즘상 약한 키가 아니라 추측 가능한 키이며, 실제로 공격 대상이 되어 왔습니다.

쉽게 말하면

대부분의 번호는 제대로 잠기는데, 특정 번호 몇 개만 맞추면 자물쇠가 아예 잠기지 않는 번호 자물쇠와 같습니다. 비밀번호를 쉽게 정한 사람의 실수가 아니라 자물쇠 구조 자체의 예외입니다.

이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.