6. 정수론: 암호화, 복호화 (Number Theory: Encryption and Decryption)
튜링 코드Turing Code는 앨런 튜링이 개발한, 정수론을 이용한 암호화 방법이다.
"victory"라는 메세지를 암호화하는 예시를 통해 튜링 코드를 배워보자.
우리가 암호화할 메시지를 m, 암호화된 메시지를 m′, 암호화에 사용할 키 값을 k로 나타낼 것이다.
"victory"는 정수로 22090320151825로 나타낼 수 있다. (v는 알파벳 22번째, i는 09번째... 와 같은 방식이다.)
튜링 코드 버전 1
소수 만들기
먼저 암호화할 숫자에 적절한 수를 붙여 소수로 만들어준다. 22090320151825에 13을 붙이면 소수가 된다.
m=2209032015182513
키 값 정하고 암호화하기
다음으로 암호화에 사용될 키key 값을 하나 정한다. 이 키값이 있어야만 암호화와 복호화가 가능하다.
키값 역시 큰 소수를 사용한다.
이제 단순히 암호화할 메세지와 키 값을 곱해주면 암호화가 완료된다.
수학적으로, 두 소수의 곱은 복호화하기가 상당히 복잡하다. 약분이 E⋅k로만 가능한데, 이를 약분하려면 무수한 수의 숫자를 하나하나 대입해가며 약분이 되는 k나 E를 찾는 수밖에 없다.
E′=E⋅k
튜링 코드 버전 1의 복호화, 취약점
암호화 방법을 보면 알겠지만 튜링 코드 버전 1의 복호화는 아주 간단하다.
E=E′k
단순하면서도 해킹하려면 엄청난 노가다를 해야하니 좋아보이지만, 튜링코드엔 큰 단점이 있다. 만약 같은 키로 암호화된 문장 두개가 있다면, 최대공약수를 이용해 k를 알아낼 수 있다.
E′1=E1⋅kE′2=E2⋅kk=gcd(E1′,E2′)
튜링 코드 버전 2
튜링 코드 버전 2는 두 개의 키 값을 요구한다. 공개 키Public Key인 p와 비공개 키Secret Key인 k이다. 두 키는 모두 소수이다.
암호화할 메세지 m은 0부터 p−1사이의 값이다. (m∈{0,1,⋯,p−1})
암호화와 복호화는 다음과 같다.
m′=rem(m⋅k,p)m=rem(m′⋅k−1,p)
증명
m′=rem(m⋅k,p)이므로, m′≡m⋅k(modp)이다.
이때, k−1(modp)가 있다면, m′⋅k−1≡m⋅k⋅k−1(modp) 이므로, m′⋅k−1≡m이다.
그러므로 m=rem(m′⋅k−1,p)
튜링 코드 버전 2의 취약점
만약 우리가 암호화된 데이터 중 하나라도 원문을 알고있다면, 튜링 코드 버전 2를 해킹할 수 있다. (즉, 우리가 적어도 한 쌍의 m, m′를 안다면)
m≡m′⋅k(modp)이므로, gcd(m,p)는 1이다. (m과 p는 서로소이다.)
그러므로, m′⋅m−1≡m⋅k⋅m−1≡k(modp)이다.
k가 뭔지는 모르지만, 이를 통해 $k^{-1]$을 계산할 수 있다.
튜링 코드 v2 실습
m=2,k=13,p=7을 써서 암호화 실습을 해보자.
m′=rem(m⋅k,p)=rem(2⋅13,7)=5
우리가 k를 안다면, 복호화는 다음과 같다.
m=rem(m′⋅k−1,p)
k−1(modp)는 k⋅k−1≡1(modp)이므로,
13⋅k−1≡1(mod7)
k−1=6
그러므로,
m=rem(5⋅6,7)=30mod7=2
해킹 실습
만약 우리가 k는 모르고 m=2,m′=5만 알았다고 생각해보자. p는 공개키로, 7임이 알려져있다.
m′⋅m−1≡k(modp)이다.
m⋅m−1=1(modp)이므로, m−1=4이다.
5⋅4≡k(mod7)
이제, k−1을 계산 가능하다.
20의 (mod7)에 대한 곱셈의 역원을 구하면 된다.
k−1=6
m=rem(m′⋅k−1,p)=rem(5⋅6,7)=2
'학부 수업 > 이산수학' 카테고리의 다른 글
8. RSA 암호화 (RSA Encryption Algorithm) (1) | 2020.10.17 |
---|---|
7. 정수론: 오일러의 피 함수과 페르마의 소정리 (Number Theory: Euler's Phi Function and Fermat's Little Theorem) (2) | 2020.10.17 |
5. 정수론: 서로소와 합동식 (Number Theory: Congruent and Relatively Prime) (2) | 2020.10.17 |
4. 정수론: 최대공약수 (Number Theory: Great Common Divisor) (1) | 2020.10.14 |
3.5 Unstacking Game 강한 귀납법으로 증명하기 (0) | 2020.10.14 |
댓글
이 글 공유하기
다른 글
-
8. RSA 암호화 (RSA Encryption Algorithm)
8. RSA 암호화 (RSA Encryption Algorithm)
2020.10.17 -
7. 정수론: 오일러의 피 함수과 페르마의 소정리 (Number Theory: Euler's Phi Function and Fermat's Little Theorem)
7. 정수론: 오일러의 피 함수과 페르마의 소정리 (Number Theory: Euler's Phi Function and Fermat's Little Theorem)
2020.10.17 -
5. 정수론: 서로소와 합동식 (Number Theory: Congruent and Relatively Prime)
5. 정수론: 서로소와 합동식 (Number Theory: Congruent and Relatively Prime)
2020.10.17 -
4. 정수론: 최대공약수 (Number Theory: Great Common Divisor)
4. 정수론: 최대공약수 (Number Theory: Great Common Divisor)
2020.10.14
댓글을 사용할 수 없습니다.