* 해시함수
- 정의 : 데이터(입력)을 비교적 작은 크기의 스트링(출력)으로 만드는 방법
: (해시 함수의 출력값은 입력 데이터의 디지털 지문 역할을 한다.)
- 성질
1) 고정 길이의 출력 : 어떠한 크기의 메시지라도 입력으로 사용할 수 있어야 한다, 어떤 길이의 메시지가 입력되더라도 출력값은 항상 고정된 길이다.
2) 빠른 계산 속도
3) 메시지가 다르면 해시 값도 다름 : 메시지가 1비트만 달라도 출력값은 완전히 다른 값이 되어야 한다.
- 예시
- 해시함수를 사용하는 이유?
: 메시지 무결성(integrity)을 제공한다. -> 원본 메시지가 변조되지 않음을 보장해주는 성질
- 메시지 변조 감지 코드(MDC)
: 암호학적으로 원본 메시지에 대응하는 메시지 변조 감지 코드를 생성하기 위한 방법으로 해시함수를 사용한다.
: 클라우드 스토리지의 예
1) 사용자가 클라우드 스토리지 서비스를 이용해 자신의 데이터를 저장하고 필요할 때 다시 내려받아 사용한다.
2) 클라우드에 저장된 자신의 데이터에 대한 무결성을 확인하려면?
*암호학적 해시함수
: 특정한 보안 성질들을 추가적으로 제공하는 해시함수
1) 역상 저항성 : 해시값 y가 주어졌을 때, h(M)=y를 만족하는 M을 찾는 것이 계산적으로 불가능하다는 성질
(=일방향성)
2) 제2 역상 저항성 : 해시함수 h(.)와 메시지 M이 주어졌을 때, h(M)=h(M')을 만족하는 M'(M아님)를 찾는 것이 계산적으로 불가능
3) 충돌 저항성 : 해시함수 h(.)가 주어졌을 때 h(M) = h(M')을 만족하는 서로 다른 M과 M'쌍을 찾는 것이 계산적으로 불가능
: (M,M')을 충돌쌍이라고 한다.
*다양한 해시함수
*해시함수 공격
*해시함수 응용
1) 온라인 입찰
: Alice, Bob, Charlie 가 입찰자, 각각 MA, MB, MC 금액으로 입찰한다.
상호 입찰금이 비밀로 지켜질 것을 신뢰하지 못한다.
각각 입찰금의 해시값인 h(MA), h(MB), h(MC)를 온라인 상에 공개한다.
이후 실제 입찰금 MA, MB, MC를 공개한다.
: "해시값을 통해 입찰금을 알아낼 수 없다" -> 단방향성
"해시값 공개 후 입찰금을 변경할 수 없다" -> 충돌 저항성
2) 소프트웨어의 변경 검출
*메시지 인증 코드 (MAC)
: 송신자와 수신자가 공유한 키를 사용한다 -> 메시지 인증
: 메시지 인증코드를 전송하는데 안전한 채널을 사용하지 않아도 된다.
*메시지 변조 감지 코드 (MDC)
: 해시함수를 이용한 메시지 변조 감지 코드 -> 메시지 무결성 보장
: MDC = h(M)는 (변조가 불가능한) 안전한 채널로 전송해야 한다.
: 메시지가 "누구로부터" 전송된 것인지는 확인할 수 없다. -> 위장공격 가능!
*MDC vs MAC
*메시지 인증코드에 대한 공격
1) 재전송 공격 : 저장해둔 정당한 MAC값을 반복해서 전송하는 방법
- 방어방법 : 순서번호 / 타임스탬프 / 비표
*메시지 인증 코드로 해결할 수 없는 문제
1) 제 3자에 대한 메시지 인증
: 키를 공유한 사람들만 메시지를 인증할 수 있으며, 제 3자는 검증 불가
( 제 3자가 인증할 수 있도록 하기 위해서는 송신자와 수신자 간에 공유된 키를 "안전하게" 알려줘야 함)
2) 부인방지
: bob이 alice에게 "메시지+MAC" 전송
alice는 메시지 인증 가능
만약 bob이 메시지를 보낸 사실을 부인하면?
-> 이 메시지와 MAC은 alice가 만든 것이지, 내가 만든 게 아니야!