두 개의 키
- 모두에게 open 하는 공개 키 (public key): 송신자가 사용한다. 상대방의 public key를 이용하여 암호화.
- 나만 아는 개인 키 (private key): 수신자가 사용한다. 자신의 private key를 이용하여 복호화.
trap door, one way function을 활용
- trap door: 비밀 정보를 아는 사람은 hard한 계산 과정이 가능해지고 비밀 정보를 모르면 hard함
- one way function: 한 쪽 방향 계산은 쉽지만 반대 방향 계산은 어려운 것. 예를 들면 소인수 분해.
공개키 방식을 이용하면 대칭키 방식에서 문제가 되던 키 공유 문제 해결!
전자 서명 제공
- 자신의 private key로 서명한다.
- private key로 만들어진 전자 서명을 public key로 검증한다.
Knapsack
- 서로 다른 무게의 금괴를 최대한으로 가져오는 조합을 찾는 문제
주어진 금괴들 중 몇 개를 선택하여 합이 302가 되는 조합을 찾아야 한다.
푸는 방법: 모든 조합을 계산한다 -> 계산이 어려움!!
Superincreasing knapsack
- 4번째 금괴의 무게가 앞의 금괴 합보다 크면 Superincreasing knapsack 문제이다. -> 풀기 쉬워짐!
Knapsack 알고리즘을 이용한 암호화 예시!
1) 앨리스는 superincreasing knapsack을 생성
2) 그게 private key가 된다.
3) 그것을 그냥 knapsack처럼 보이게 변환한다.
4) 변환한 게 publci key가 된다. 풀기 어려우니까!!
- mod 연산은 한정된 값으로 mapping 한다고 볼 수 있다.
- 예를 들면, mod 6 연산의 값으로는 0~5까지 있으니까 결국 0~5 중 하나의 값과 매핑한다고 볼 수 있다.
modular inverses
- 3이랑 곱해서 mod 7을 하면 1이되는 수를 찾아야 한다 -> 5
- x, y가 서로소 관계면 modular inverse가 존재한다.
- 어케 구함? 최대공약수 알고리즘
구체적인 예시를 들어보자~
1) 위에서 말한 것처럼 앨리스는 private key인 가중치와 m, n을 생성했다.
2) 생성한 가중치를 변환한 것과 n이 public key가 된다.
3) 밥이 보내고 싶은 데이터(8bit)는 P = 10010110이다.
4) 앨리스의 public key 1, 4, 6, 7번 값을 더한다 -> 82 + 83 + 373 + 10 = 548
5) 548을 앨리스에게 전송한다.
6) 앨리스는 밥에게 받은 548이 대체 어떤 값들을 더해서 나온 것인지 풀어야 한다! 이렇게 끝나면 일반적인 knapsack 문제처럼 보여서 풀기 어렵지만 앨리스는 이 문제를 superincreasing 문제로 바꿀 수 있다! (trap door)
7) 푸는 방법: w * m mod n = w'
이뒤에이해가안감...............................질문하기
- Trapdoor: 밥이 문제를 내는 건 쉽지만 트루디가 푸는 건 어렵다.
- One-way: 트루디는 못 풀지만 앨리스는 superincreasing으로 풀 수 있다. 값을 아니까!
- knapsack cryptosystem is insecure. 많이 쓰진 않았다. 나중에 lattice reduction 공격을 당했다.
- 결론: general knapsck으로는 충분하지 않다!!
- 소인수분해 문제 기반 알고리즘
- N = pq 라고 할 때 pq로 N을 구하는 건 쉽지만 N을 보면서 pq를 구하는 것은 어렵다 -> 소인수분해는 풀기 어려움
과정을 살펴보자~
1. 앨리스의 키를 생성한다. 두 개의 소수 p와 q를 선택한다.
2. pq = N (이 때 p와 q는 외부 노출되면 안 되지만 private key는 아니다.)
3. (p-1)(q-1) 계산
4. 랜덤하게 e 선택. 이 때 e는 (p-1)(q-1)과 서로소여야 한다. modular inverse 존재를 위해!
5. e·d = 1 mod (p-1)(q-1) 가 되는 d 값을 찾자!
- public key is (N, e)
- private key is d
자자 과연 RSA는 트루디가 풀 수 있을까???
일단 트루디는 d 값을 알아야 메시지를 풀 수 있다. 근데 d 값을 알려면?
e·d = 1 mod (p-1)(q-1) 이걸 풀어야 한다.
그러면 p랑 q를 알아야 한다. 근데 p랑 q를 알려면?
N = p·q 즉, N으로부터 p와 q를 알아내야 한다. 이건 소인수분해 문제임! 따라서 N으로부터 p, q를 구하는 것은 어렵다 그래서 RSA는 굉장하다~
이건 오일러 정리로 증명할 수 있는데 넘어가자
1) 앨리스는 두 개의 소수 p = 11, q = 3을 선택한다.
2) N = pq = 33
3) (p-1)(q-1) = 20
4) 20과 서로소가 되는 e = 3
5) e·d = 1 mod 20이 되는 d값을 구한다.
6) (3 * d) mod 20 = 1, d = 7이다.
7) 앨리스의 public key = (N,e) = (33, 3)이다. private key = d = 7이다.
1) 메시지 M = 8
2) C = M^e mod N = 8^3 mod 33 = 17
3) 암호화된 메시지 17을 앨리스에게 전달한다.
4) 앨리스는 복호화를 진행한다.
5) C^d mod N = 17^7 mod 33 = 8 -> 원래 메시지와 일치한다!