오래 못 할 짓 하지 않기
[ 컴퓨터 보안 ] 15. Cryptography : Asymmetric Key - Digital Signature / Public Key Infrastructure 본문
[ 컴퓨터 보안 ] 15. Cryptography : Asymmetric Key - Digital Signature / Public Key Infrastructure
쫑알bot 2024. 11. 12. 12:35Digital Signature
: Non-repudiation 을 위해서
자기가 해놓고 오리발 내밀기 불가능하도록! 부인 방지
[ 원리 ]
Sender가 본인의 Private Key로 Encrypt해서 보내고
Receiver가 Sender의 Public Key로 Decrypt한 것을 말한다.
- Case of No non-repudiation
1. Alice가 Bob에게 MAC으로 메시지를 보낸다.
➡️ 이 때 Bob은 이 메시지가 Alice로부터 왔고 , Modified되지 않았다고 생각한다.
2. 근데 Alice가 '나 보낸 적 없는데?' 하면 ??
부인할 수 있으면 안 됨
📌 Digital Signature의 기능
- Author (sender , originator ) 를 식별하는 것 ➡️ Validation of identity of originator
- Date & Time을 이는 것 ➡️ Message Intrgrity
- Message의 Content를 Authenticate 하는 것 ➡️ Non - repudiation
추가적으로는, 중간 매개체인 Third paries가 guarantee해준다.
- Sender는 Sender의 private key로 enc 하여 signature 생성
- Receiver는 가지고 있는 Sender의 public key 로 dec 하여 signature 확인
* public - private key는 서로 inverse 관계다
Case 1) Trusted Center를 이용함
1. Alice가 본인의 메시지를 Alice's Private Key를 이용하여 Signature 생성
2. Trusted center에서는 받은 Signature를 Alice public Key로 Decrypt
3. Decrypt한 내용에 대해 Trusted center Private Key로 Signature 생성
4. 그 Signature를 Bob이 받아서 Trusted Center Public Key로 Decrpyt
Case 2) 직접 소통함
직접 소통하는 대신 Signature를 한 번 Encrypt, Decrypt한다.
대신 Signature는 Sender의 Private Key,
Signature는 상대의 Key로 Encrypt 한다.
📌 Digital Signature의 세부 과정
1. 메시지 Digest
2. Digest를 가지고 Sender의 Private Key로 Encrypt 하여 Signature 생성
3. [ Message와 Signature ] 전달. (signature = E(K , H(M) )
4. Receiver는 받은 메시지를 가지고 메시지 Digest ➡️ 결과값 M2
5. Receiver는 받은 Signature를 Sender Public Key로 Decrypt 한다 ➡️ 결과값 M1
6. M1 , M2 비교해서 같으면 Trust, 아니면 Reject
1. 메시지 Digest
2. Digest를 가지고 Sender의 Private Key로 Encrypt 하여 Signature 생성
3. [ Message와 Signature ] 전달. (signature = E(K , H(M) )
4. Receiver는 받은 메시지를 가지고 메시지 Digest ➡️ 결과값 M2
5. Receiver는 받은 Signature를 Sender Public Key로 Encrypt 한다 ➡️ 결과값 M1
6. M1 , M2 비교해서 같으면 Trust, 아니면 Reject
📌 Key Generation
키 생성은 RSA 알고리즘과 같은 방식이다.
[ 서명 과정 ]
1. Message 를 Hash 하여 Digest 한 값을 Private key를 통해 연산하고 Signature를 만든다.
2. Signature와 Message를 함께 보낸다.
[ 서명 인증 과정 ]
1. Signature와 Message를 함께 받는다.
2. Message : Hash 함수를 통해 D를 구한다.
Signature : Sender의 Public Key로 D를 구한다.
3. 비교해서 같으면 Accept한다.
Public Key Infrastructure
Symmetric Key Distribution 는 간단해서 빠르긴 하지만
두 명의 Host 사이에서 Secret key 인증이 필요하고
인원이 많아지면 n(n-1) / 2개의 secret key가 생긴다는 한계가 있다.
- Symmetric Key의 문제점
1) Key의 수 ➡️ Asymmetric 으로 해결
2) Key 분배 ➡️ Trusted Third Party를 사용한다.
📌 Public Key Distribution
Key-Distribution Center ( KDC ) 를 3번째 참가자로 사용한다.
KDC는 모든 유저의 Key를 가지고 있고
유저들은 [ 본인의 Key , 연결하고자 하는 유저 ] 를 KDC에 보낸다.
> 두 유저 간의 Secret (Session) Key를 만들어준다.
❌ 문제점
1) KDC 를 공격하면 모든 정보를 가져간다.
2) KDC가 작동하지 않거나 문제가 생기면, 모든 시스템이 막힌다.
3) KDC의 속도 = Bottlenect Link
= KDC를 조금 분산 시켜놓자.
- Session Key
> KDC가 각각의 유저에게 Secret Key를 발급해준다.
ex) Alice가 Bob에게 연결하려고 하는 상황
➡️ Alice + Bob에게 Secret Key가 있어야 한다.
➡️ Alice 와 Bob의 Key를 사용하여 이들만 쓸 수 있는 Session Key를 만들어준다.
*Session Key는 한 번만 쓸 수 있다.
[ Needham - Schroeder Protocol ]
1. Alice가 Bob에 대한 요청을 KDC에 한다. 이때, Alice가 만든 무작위 일회용 번호를 같이 보낸다.
2. KDC는 응답으로 Alice의 Key로만 열 수 있는 정보들을 보내고, 그 안에는 Bob만 열 수 있는 티켓(박스)도 있다.
정보의 구성 = Bob(주소) + 무작위 번호 + Session Key + [ Alice(주소) + Session Key ]
3. Alice 가 Bob만 열 수 있는 티켓(박스)를 Bob에게 보낸다.
4. Bob이 만든 무작위 일회용 번호를 Session Key로 잠근 뒤, 암구호 역할로 보낸다.
➡️ 무작위 수 = 문답 / 무작위 수 -1 = 응답.
5. Alice가 Session Key로 열어서, 응답으로 Bob의 일회용 번호 -1 한 값을 보낸다.
(+6 Alice가 제대로 열었다면 올바르게 확인 Rb에서 Rb-1 값을 보내줄 것이다. Alice가 아닌 경우 Key도 다른 것일테니 제대로 Decrypt못했을 거고, 그럼 열었다고 해도 Rb가 이상한 값, 그걸 -1한 값을 줄테니 Bob은 거절할 수 있다.)
[ Otway-Rees Protocol ]
1. Alice가 Bob에게 암호화되지 않은 채로 정보를 보내고, 그 안에 일부 정보는 Alice의 Key로 잠가서 보낸다.
정보 = From(Alice) + To(Bob) + Common 무작위 일회용 값
+ [ Alice의 주소 , Bob의 주소 , Common 무작위 일회용 값 , Alice가 만든 무작위 값 ]
2. Bob이 KDC에 [ Alice가 잠가서 보낸 정보 ] + [ Bob이 잠가서 보낸 정보 ] 를 KDC에 보낸다.
3. KDC는 그걸 다 열 수 있기에 열어서 Bob과 Alice가 각자가 열 수 있는 Ticket 두 개를 준다.
그 때 Bob이 다른 요청도 처리하고 있다면
현재 KDC에서 온 정보가 Alice와 처리하는 정보와 관련된 것임을 표시하기 위한 것
4. Bob이 Alice에게 Alice 티켓을 보낸다. = Alice가 만든 무작위값 + Session Key
= 이거 줄테니까 말해봐
5. Alice는 그 Session Key 를 가지고 전달할 메시지를 보낸다.
📌 Public Key Agreement (without KDC)
: KDC 없이도 서로 Shared Secret Key를 만들어 낼 수 있다.
[ Diffie - Hellman Protocol ]
P는 아주 큰 소수 , g는 p의 primitive root
이 두 개는 Public이다.
1. Alice 가 R1을 만든다.
R1 = g^x mod P
2. R1을 Bob에게 보낸다.
3. Bob이 R2을 만든다.
R2 = g^y mod P
4. R2를 Alice에게 보낸다.
5,6. Alice는 Bob에게 받은 R2 R2 ^x mod P
Bob은 Alice에게 받은 R1을 가지고 R1 ^y mod P
를 수행하여 같은 K값을 가지게 된다.
같은 K값을 가지게 된 둘은 서로 그 값을 Secret Key로 사용한다.
- 특징
둘이 서로 x와 y에 대한 정보를 알지 못하더라도
같은 값을 갖게 된다.
예제
P = 23
g = 7로 두자
1. Alice 가 x=3 으로 둬서
R1 = g^x mod p
= 7^3 mod 23
= 21
2. Bob에게 21을 전송한다
3. Bob 은 y=6 으로 둬서
R2 = g^6 mod p
= 7^6 mod 23
= 4
4. Alice에게 전송
5,6. [ Alice ] : R2 ^ x mod P = (4^3) mod 23 = 18
[ Bob ] : R1^y mod P = (21^6) mod 23 = 18
둘은 서로 어떤 값을 취했는지 알려주지 않았지만 같은 Key값을 가진다.
Key는 g , x, y 의 조합으로 만들어진다.
- g는 Public
- x와 y를 서로가 하나씩 가지고 있고
- R1, R2를 서로 공유함으로써 서로의 x,y의 값을 가질 수 있다.
(출처)
한동대학교 컴퓨터 보안
'3학년 2학기 > 컴퓨터 보안(Computer Security)' 카테고리의 다른 글
[ 컴퓨터 보안 ] 18. Internet Security Protocol (0) | 2024.11.26 |
---|---|
[ 컴퓨터 보안 ] 17. Cryptography - Public Key Infra : Digital Signature/ Key Distribution / Certificate Revocation (0) | 2024.11.15 |
[ 컴퓨터 보안 ] 14. Cryptography : Asymmetric Key - SHA (1) | 2024.11.08 |
[ 컴퓨터 보안 ] 13. Cryptography : Asymmetric Key - Message Digest (0) | 2024.11.05 |
[ 컴퓨터 보안 ] 12. Cryptography : Asymmetric Key ( 비대칭키 ) (0) | 2024.11.01 |