정보보안의 원리
웹 416쪽 무료 · 종이책 B5 416쪽
© K-BOOKS · 무료 웹 열람용 콘텐츠입니다. 무단 복제·저장·인쇄·재배포를 제한합니다.
공개키 암호는 모두에게 알려도 되는 공개키와 소유자가 지켜야 하는 개인키를 한 쌍으로 만듭니다. 공개키를 아는 것만으로 개인키 연산을 수행하기 어렵게 설계합니다. 받는 사람의 공개키로 비밀을 포장하고 그 사람의 개인키로 열게 할 수 있고, 개인키로 서명한 결과를 공개키로 검증하는 구조도 만들 수 있습니다. 다만 모든 공개키 알고리즘이 암호화와 서명을 둘 다 제공하는 것은 아닙니다. 앞 절의 DH는 키 합의에, 이후의 Ed25519는 서명에 사용하는 방식입니다.
RSA는 큰 정수의 인수분해와 관련된 수학을 이용합니다. 큰 소수 p와 q를 곱해 n을 만드는 것은 쉽지만 n만 보고 두 소수를 찾아내는 일은 적절한 크기와 생성 조건에서 어렵습니다. 공개키에는 n과 공개 지수 e가 들어가고, 개인키는 비밀 지수 d와 관련 값을 보호합니다. 교육용으로는 φ(n)=(p−1)(q−1)을 이용해 e×d를 φ(n)으로 나눈 나머지가 1이 되도록 설명할 수 있습니다. 실제 표준은 키 생성과 표현을 더 엄밀하게 규정합니다.
작은 소수 p=61, q=53을 사용합니다. 이 값과 패딩 없는 계산은 교육용이며 실제 데이터 보호에 안전하지 않습니다.
n=61×53=3233이고 φ(n)=60×52=3120입니다. 공개 지수 e=17은 3120과 공통 인수가 1뿐이므로 역원을 구할 수 있습니다.
17×2753=46801=3120×15+1이므로 d=2753은 필요한 조건을 만족합니다. 공개키를 (3233, 17), 비밀 지수를 2753으로 잡습니다.
평문을 n보다 작은 정수 m=65로 표현합니다. 암호문 c는 6517 mod 3233=2790입니다. 실무 메시지를 이렇게 바로 정수에 넣는 것은 금지하고, 여기서는 연산 관계만 관찰합니다.
개인키 연산으로 27902753 mod 3233을 계산하면 65가 나옵니다. 아래 코드의 마지막 비교가 True인 것으로 원래 값의 복원을 확인합니다.
공개키를 가진 사람은 누구나 암호화할 수 있습니다. 따라서 2790을 받았다는 사실만으로 누가 보냈는지는 알 수 없습니다. 공개키 암호화와 송신자 인증은 별개의 요구입니다.
깨달음공개 지수와 비밀 지수는 정해진 수학적 관계를 갖습니다. 큰 수, 올바른 인코딩·패딩, 검증된 구현이 더해져야 실제 RSA 방식이 됩니다.
# 교육용 RSA: 실제 보호에 사용하지 않는다.
p, q, e = 61, 53, 17
n = p * q
phi = (p - 1) * (q - 1)
d = pow(e, -1, phi)
m = 65
c = pow(m, e, n)
recovered = pow(c, d, n)
print(n, phi, d) # 3233 3120 2753
print(c, recovered, recovered == m) # 2790 65 TruePython 3.8 이상에서 음수 지수와 mod를 함께 사용해 모듈러 역원을 구할 수 있습니다. 이 예의 작은 키와 패딩 없는 연산은 수학 확인용입니다.
패딩 없는 RSA에서는 같은 m과 공개키가 늘 같은 c를 만듭니다. 곱셈과 관련된 대수적 성질도 그대로 남습니다. 이런 성질을 감추고 안전한 메시지 형식을 제공하기 위해 RSA 암호화에는 OAEP 같은 표준 인코딩을 결합합니다. 서명에는 PSS처럼 서명을 위해 설계된 방식이 따로 있습니다. “공개키로 암호화하고 개인키로 복호화한다”는 계산 방향만 보고, 반대로 적용하면 곧바로 안전한 전자서명이라고 생각해서는 안 됩니다.
공개키 방식은 큰 파일을 블록마다 직접 보호하는 데 일반적으로 쓰지 않습니다. 임의의 대칭키를 만들고 공개키 방식으로 그 키를 전달하거나 합의한 뒤, 본문 데이터는 인증된 대칭키 암호로 처리합니다. 이런 조합을 하이브리드 암호라고 합니다. 예를 들어 저장 파일에는 암호화된 데이터 키와 nonce, 암호문, 태그를 함께 저장하고, 복호화할 권한이 있는 키 관리 서비스가 데이터 키를 열어 주게 설계할 수 있습니다. 공개키를 썼다는 사실보다 어떤 키가 어떤 데이터를 여는지의 연결이 더 중요합니다.
타원곡선 공개키 방식은 RSA와 같은 인수분해 문제를 쓰지 않습니다. 비교적 짧은 키 표현으로 필요한 보안 수준을 제공할 수 있지만 키 길이 숫자를 알고리즘 사이에서 그대로 비교하면 안 됩니다. RSA 256비트와 타원곡선 256비트가 같은 강도를 뜻하지 않는다는 말입니다. 또한 표준 알고리즘도 오류 메시지, 실행 시간, 전력 소비 같은 부수 정보를 통해 비밀이 샐 수 있습니다. 일정 시간 연산과 부채널 대응을 갖춘 구현을 사용하고, 직접 만든 암호 코드를 운영 환경으로 옮기지 않는 이유입니다.
무료 학습은 그대로, 종이책은 필요한 분을 위한 선택지입니다.
웹 416쪽 무료 · 종이책 B5 416쪽
웹 513쪽 무료 · 종이책 B5 513쪽