더북(TheBook)

이제 16자리 신용카드 번호의 크기와 형태를 유지하는 ‘완벽한(혼돈과 확산을 충족하는)’ 알고리즘을 만들어 봅시다. 방법은 ‘16자리 십진수 원문’에 무작위(Random Shuffle)로 ‘16자리 십진수 암호문’을 각각 매칭하는 모든 경우의 수(모든 가능한 테이블)를 생성하는 것입니다.

 

| ‘완벽한’ 알고리즘을 사용하여 만들 수 있는 원문–암호문 테이블 예 |

신용카드 번호 원문

신용카드 번호 암호문

0000 0000 0000 0001

9456 1238 7623 9012

0000 0000 0000 0002

7123 8829 3128 0023

0000 0000 0000 0003

4128 4328 2811 8239

 

‘완벽한’ 알고리즘이 생성한 테이블의 집합에서 각 테이블(원문-암호문 매칭 관계에서 하나의 경우)은 유일합니다(첫 번째 조건). 또 각 테이블에서 암호문은 무작위로 생성했으므로 공격자는 어떤 키를 사용했는지 전혀 추측할 수 없습니다(두 번째 조건). 원문과 암호문의 관계도 전혀 알 수 없습니다(세 번째 조건).

그런데 이처럼 안전성이 확보된 ‘테이블의 집합’은 용량이 매우 커서 실용성이 없습니다. 16자리 십진수를 16자리 십진수로 매칭하는 모든 경우의 수는 용량이 약 60,000GB3에 달합니다. 현실적으로 사용할 수 있는 알고리즘을 구성하려면 키의 크기(가능한 경우의 수)를 줄여야 합니다. 이때 알고리즘의 안전성이 ‘이미 검증된 AES의 안전성(2128=128비트)’ 이상만 된다면 충분히 안전하고 실용적인 FPE 알고리즘을 만든 것이라고 볼 수 있습니다. 즉, 원문과 암호문이 모두 16자리 십진수인 암호 알고리즘을 만들면서 AES 이상의 안전성을 확보하는 것이 알고리즘 개발의 과제입니다.

 

 


3 테이블 용량은 1016P1016 = (1016) ! = 60,000GB가 됩니다. P는 흔히 순열(Permutation)을 표시할 때 사용합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.