암호 해싱과 메시지 인증
메시지 무결성
•
메시지가 불법적으로 수정되지 않았음을 보장 (즉, 원본과 동일함을 보장한다)
•
아날로그 문서 → 지문, 도장으로 무결성 보장
•
디지털 문서 → Message Digest 으로 무결성 보장
메시지 다이제스트 (Message Digest)
// ex)
func Hash(message) => fingerprint
// 메시지에 암호 해싱을 적용하여 생성
JavaScript
복사
무결성 점검 과정
현재 메시지가 수정되었는지 판단하기 위해
•
기존에 저장된 Message Digest와
•
현재 메시지에서 생성된 Message Digest를 비교
•
두가지 Message Digest를 비교해보고 같다면 무결성 검증된 것이다.
•
만약 다르다면 메시지가 수정되었다는 것이다.
암호 해시 함수의 정의
•
암호 해시 함수란 반대 방향으로의 복원이 거의 불가능한 해시 함수이다.
•
입력된 데이터를 고정된 길이의 데이터로 변환한다.
암호 해시 함수의 조건
1. Preimage Resistance (단방향성)
•
y = Hash(M) 일 때, 공격자가 (y, H)에서 M을 발견하는 것이 매우 어려워야 한다.
◦
공격자가 암호 해시 함수를 적용한 결과를 안다고 해서, 역으로 해시 함수를 풀어서 메시지를 발견하는 것이 불가능 해야한다.
2. Second Presage Resistance (약한 충돌 저항성)
•
M과 H(M)이 주어질 때, M’ ≠ M 이면서 H(M’) = H(M) 인 M’ 를 찾기가 어려워야 한다.
•
즉, M과 H(M)을 안다고 했을 때, 완전 탐색으로 가능한 모든 M’을 넣었을 때 H(M)과 같은 H(M’)이 나오는 경우가 없어야한다.
3. Collision Resistance (강한 충돌 저항성)
•
H(M) == H(M’) 인 서로 다른 메시지 M과 M’ 를 찾기 어려워야 한다.
•
2번은 M과 H(M)이 주어진 상태에서 하나의 메시지를 고르지만, Collision Resistance는 M과 M’을 모두 공격자가 임의로 고를 수 있다.
각 공격의 유형별 난이도
•
해시 함수의 결과 → n-비트, 50% 이상의 성공 확률을 위하여 k번의 시도가 필요
◦
해시 함수의 결과로 나오는 비트의 길이가 길어질수록 안전하지만, 그만큼 용량, 데이터의 부담은 늘어난다.
상용 암호 해시 알고리즘
•
암호 해시 알고리즘의 배경에 깔린 아이디어 : 반복 해싱 (Iterative Hashing)
암호 해시 알고리즘의 종류
•
MD5
◦
1991년에 만들어진 128비트 알고리즘
◦
충돌 저항성이 약하다
•
SHA-1
◦
1995년에 미국 NIST에서 만들어진 160비트 알고리즘
◦
충돌 저항성이 약하다
•
SHA-1
◦
2002년에 미국 NIST에서 만들어진 알고리즘
◦
해시값의 크기에 따라 SHA-256, SHA-384, SHA-512 등 6개의 해시함수로 구성한다
◦
충돌 저항성이 높다
•
SHA-3
◦
2012년 미국 NIST에 의해 선정된 알고리즘
◦
SHA3-224, SHA3-256, SHA3-384, SHA3-512
◦
Keccack-256 : Ethereum에서 사용
•
RIPEMD160
◦
1996년에 만들어진 160비트 알고리즘
SHA-512
•
Message Digest 생성 과정
◦
Digest의 길이 = 512비트
◦
Message 블록 =. 024비트
◦
Message 길이 <
•
길이 필드와 패딩
◦
Message의 길이 필드 : 128비트
◦
1024 비트의 정수 배를 맞추기 위하여 “100..00” 형식의 패딩 추가
◦
(메시지 길이 + 패딩 길이 + 128)
= 0 mod 1024
ex) 메시지의 원래 길이가 2590비트일 경우, 패딩 비트의 길이?
•
패딩 길이 = (-2590 - 128) mod 1024 = 354
•
64비트의 word 단위로 계산이 진행
◦
Message Digest = 512비트 = 8개의 word로 구성
◦
Block = 1024비트 = 16개의 word로 구성
◦