오래 못 할 짓 하지 않기
[ 컴퓨터 보안 ] 14. Cryptography : Asymmetric Key - SHA 본문
[ 컴퓨터 보안 ] 14. Cryptography : Asymmetric Key - SHA
쫑알bot 2024. 11. 8. 18:28SHA
Secure Hash Algorithm
다양한 버전이 있지만, 요새는 SHA-512 를 사용하고 이에 대해 알아볼 예정
- Inverse할 일이 없어서 그냥 Hash만 시키면 된다.
1,2단계 )
1024 bits 단위로 Block을 구성하기 때문에 모자라면 Padding을 붙인다.
문제) 2590 비트의 원본 메시지가 있을 때 Padding bits의 수는?
➡️ 1024 단위여야 함, 2048보다는 많고 3072보다는 적다.
[ 원본 메시지의 길이 + Padding + 128 (메타데이터 느낌) ] = 3072
= 2590 + Padding + 128 = 3072
Padding = 354 bits
대신 Padding 은 가장 앞 비트만 1이고 나머지는 0이기 때문에
1*1개+ 0*353개
1 word = 8bytes = 64 bits
1024 단위로 하나의 블록을 만들면
16 words가 나온다.
우리는 SHA-512 알고리즘이므로 이 1024bits 짜리 블록을 512 bits로 Digest할 것이다.
방법은 아래 사진과 같다.
우선 1024 bits, 즉 16 words ➡️ 80 words 로 확장시킨다.
- 0~15개 bits = 그대로 씀
- 16~80 개는 이전에 만들었던 Word 4개를 가져와서 사용한다.
i 번째 Word = ( i-16번째 , i-15번째 , i-7번째 , i-2번째 ) 로 만들어진다.
ex) 16번째 Word = W0 , W1 , W9 , W14 로 만든다.
식 보면 알 수 있듯이 엄청 섞음
Step 1,2에서 봤던 Digest 값들은 초기에 이렇게 세팅이 되어있음
이 초기 세팅이 Step5에 들어가는 곳에서 쓰임
[ 8 Word Initialized Words ] + [ Extended 80 Words ] + [ Key ] 가
한 세트로 Round에 들어간다.
첫 단계만 Initialization 이 들어가고 그 이후로는 전 단계의 결과값이 들어간다.
그 Round 안을 한 번 들여다보자
[ Majority ]
[ Rotate ]
[ Conditional ]
📌 분석
- Collision
: 다른 메시지로부터 같은 Digest값을 나오는 것
이에 대해 아직은 Collision Resistant하다고 보인다.
같을 확률 = 1/ 2^512
Message Authentication
Digest와 비슷하지만 목적이 다르다.
+ Sender와 Receiver는 서로 Secret Key를 가지고 있어야 한다.
📌 목적
- Message 의 Integrity를 보호하기 위해
➡️ Active Attack ( Ex) Modification) 을 감지할 수 있음.
- Sender가 Validate한 사람인지 확인하기 위해
* 하지만 Symmetric Encryption만으로는 Data Auth에 적합하진 않다.
📌 기밀성없이 메시지 인증을 하는 경우
1) 브로드캐스트 메시지(Broadcast message)
> 특정 수신자가 아닌 다수에게 전송되는 메시지
2) 네트워크를 사용할 수 없는 메시지( network unavailable message)
> 네트워크 장애로 인해 기밀성 있는 메시지 전송이 불가능한 경우
3) 복호화할 시간이 없는 메시지(One side has heavy load and cannot afford the time to decrypt all incoming messages)
> 시스템 과부하로 인해 모든 수신 메시지를 복호화할 수 없는 경우
4) 컴퓨터 프로그램의 평문 인증(Authentication of computer program in plaintext)
> 프로그램 코드 자체를 평문으로 인증하여 무결성과 출처를 확인하는 경우
인증 매커니즘
Message Digest는 Sender에 대한 Authenticate를 해주지 않는다.
➡️ Alice는 자신이 메시지를 보내고 있다는 것을 인증해야한다.
= Key를 서로 주고받아서 Decrypt가 되면 인증 성공
- MDC ( Modification Detection Code ) = Digest 를 통해 데이터가 중간에 변형되었는지 판단하는 것
- MAC ( Message Authentication Code ) = Sender에 대한 Message Authentication을 해주는 것
📌MDC ( 변형 감지 코드)
Alice(=Sender) 가 M을 Hash 로 돌려서 MDC를 생성한다.
- M : 털릴 수도 있는 통로로 보냄
- MDC : 절대 안전한 통로로 보냄 (나중에 비교할 때 써야하니까)
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
Bob(=Receiver) 가 M과 MDC를 받았다.
- M : 받은 M을 가지고 Alice가 돌린 Hash와 같은 함수를 돌려 MDC From Bob을 만든다.
- MDC : 안전한 통로로 받아서 변형이 100퍼 생기지 않은 MDC를 가지고 있는다.
if ( MDC == MDC From Bob ) 을 비교하여 같다면 Accept , 다르면 Reject
이는 전송 과정에서 메시지가 변형되었는지 확인해준다.
= Message의 Integrity 보장
‼️‼️여기서 의문점 ‼️‼️
: 그럼 MDC 주고 받은 통로로 Message 주고받으면 되지않나? 그렇게 안전한데
> 100퍼센트 안전한 통로를 만들 수 없기 때문에 이 방법말고 MAC을 사용한다.
📌MAC ( 메시지 인증 코드 )
이 방법은 [ Message의 Integrity + Data origin Authentication ] 모두 보장한다.
따라서 우리는 MDC를 MAC으로 바꿔서 사용한다.
+ 100% 안전한 Channel 이 없다는 것을 인정함
+ Sender 와 Receiver는 같은 KEY를 가지고 있다.
[ Alice ]
- M : 그냥 전송될 준비중
- MAC = Hash ( Message , Key ) 로 만들어진다.
이 두 개를 한 번에 묶어서 보낸다.
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
[ Bob ]
Message 와 MAC 묶음을 받음
- M : Key와 함께 Hash를 돌려서 MAC From Bob를 만든다.
- MAC : 받는다.
if( MAC == MAC From Bob ) 을 비교한다.
같다면 Accept , 다르면 Reject
둘 중에 하나라도 변조되었다면 바로 탐지가 가능하다.
📌 MAC의 장점
- Message가 Modified 되지 않는 것을 보장해준다. = Integrity
- Message가 Sender에게 왔다는 것을 보장해준다. = Confidential
- 추가적으로 Message에 Sequence 번호를 부여하면, 순서도 보장받을 수 있다.
하지만 한계점으로는
Key의 Size가 짧다면 때려맞출 수도 있음
추가 구현으로는 Nested MAC이 있다.
Hash (Hash (Message, Key) , Key) 한 값을 MAC으로 사용하는 것이다.
📌 HMAC
- Step 1 : Key의 길이는 b와 같아야 한다
- Step 2: S1 = K XOR ipad
- Step 3: Step2에서 만든 S1과 원본 메시지를 합친다.
- Step 4: 그렇게 합친 걸 Digest해서 H로 만든다. => h(S1+M) = H
- Step 5: Step 2처럼 S2 = K XOR opad
- Step 6: Step 5에서 구한 S2와 Step 4에서 구한 H를 붙인다.
- Step7 : h(S2+H) = MAC 을 만든다.
- Step 1 : Key의 길이는 b와 같아야 한다
1) Key == b ➡️ 냅둔다
2) Key len > b ➡️ Hash 를 돌려서 b까지 줄인다.
3) Key len < b ➡️ 0 으로 Padding
- Step 2: S1 = K XOR ipad
- Step 3: Step2에서 만든 S1과 원본 메시지를 합친다.
- Step 4: 그렇게 합친 걸 Digest해서 H로 만든다. => h(S1+M) = H
- Step 5: Step 2처럼 S2 = K XOR opad
- Step 6: Step 5에서 구한 S2와 Step 4에서 구한 H를 붙인다.
- Step7 : h(S2+H) = MAC 을 만든다.
(출처)
한동대학교 컴퓨터 보안