정보보호의 목표
- 기밀성: 인가된 사용자만 접근가능(수동적인 공격으로부터 보호)
- 위협요소: 키를 보유하지 않은 사람이나 프로세스에게 노출, 트래픽 분석
- 무결성: 전달되는 메시지가 임의로 변경되면 안됨, 인가된 사용자에의해 인가된 방법으로 진행되어야함(by 메시지 인증)
- 인증: 송신자 인증
- 위협요소
- 위장(송신자와 다른 사람이 송신자인 척)
- 내용 수정(메시지 내용의 변경)
- 순서 수정(메시지 순서의 변경)
- 시간 수정(메시지 지연, 재전송)
- 부인봉쇄: 수신자가 수신 부인, 발신자가 발신 부인하지 못하도록 하는 것
메시지 인증
메시지의 무결성을 기술적으로 증명하는 기법으로 다음과 같은 함수들이 존재한다
(1) 메시지 암호화: 메시지 전체를 암호화
(2) 메시지 인증코드(MAC): 고정된 길이의 값을 만드는 메시지 및 비밀키의 공개함수
(3) 해쉬함수: 임이의 길이를 고정된 길이의 해쉬로 대응 시키는 공개함수
메시지 암호화
-
비밀키 암호화 (관용 암호화)
-
공개키 암호화 (관용 암호화)
MAC (Message Authentication Code)
- 메시지에 암호학적 점검감 MAC 추가
- MAC
- 비밀키를 사용해 생성된 작은 크기의 data block
- MAC = Ck(M)
- 수신측에서 계산한 MAC이 송신측에서 보낸 MAC과 비교하여 인증
- 비밀키를 송/수신자만 알고 있다고 가정하면 메시지 인증 가능 (기밀성 가정)
- 메시지 내용 인증
- 사용자 인증 (출처)
- 메시지 순서 인증 (일련번호 사용시)
- 메시지 인증
- A,B만 아는 K1을 통해서 MAC
- 기밀성 제공
- A,B만 아는 K2을 통해서 메시지+MAC을 암/복호
Hash Function
MAC의 변형중 하나인 'one-way hash function' H (임의의 길이를 고정된 길이의 해쉬값으로)
- One-way hash function H
- H 자체는 쉽게 계산이 가능해야하고, 그 역은 어려워야한다
- 동일한 해쉬값을 가지는 입력을 찾기 힘들어야한다.
- 뒤에서 2nd-preimage resistance, coillision resistance
- H는 MD(Message Digest)라 불리기도 한다.
- MDC(Modification Detection Code)
교재에서는 Manipulation Detection Code라 되어있는 걸 발견했는데 비슷한 의미인듯
Construction of Hash Function
- CBC 모드와 비슷함
- 메시지를 잘라서, 함수에 넣은 결과를 누적시키는 방식
- 임의의 길이 → 고정길이(+ 고유특성)
- 1bit 변화가 생기면 결과는 전혀 다른 값이 됨
Hash Function
- Bitwise-XOR
- 2개 이상의 변환에 취약/ 보안에 취약 (2개의 비트의 변화를 찾아내지 못함)
- 같은 출력값을 찾기 쉬움(collison)
- Can be improved by rotating the hash code after each block is XORed into it (???)
- MD5
- 128bit 알고리즘
- UNIX 등에서 패스워드를 저장하는데 사용
- SHA,SHA-1
- Secure Hash Algorithm
- 160bit 알고리즘
- MD5에서 다이제스트의 길이가 더 길어지게 확장
- 해쉬 함수의 안정성은 hash value의 길이에 좌우 (길이가 길면 더 다양한 값이 나옴, 그렇다고 너무 길면 안됨)
MD5
- 입력: 임의의 길이 메시지
- 출력: 128비트 메시지 다이제스트
- 입력처리: 512비트 블록단위 처리
Process
- 패딩 비트의 부가 (메시지의 길이를 512의 배수로 맞춤 단 64비트는 제외하고, 1000000...의 형식)
ex) 480bit message → 960 message(padded) + 64 = 1024
- 메시지 길이의 부가: 위에서 남겨둔 64bit에 메시지 길이를 기록 (여기까지가 전처리 단계)
- MD 버퍼의 초기화: Little endian 형태로 4개의 레지스터에 값을 초기화 (4*32)
ex) A=67452301→A:01 23 45 67
- 512bit(16 word) 블록의 메시지 처리: 4개 round, T[i]= 행렬 T에서 [i]번째 32비트 단어
- 출력
전체 과정
1 round
X[k]: q번째 512비트 블록 중에서 K번째 32비트 단어
SHA
- 입력: 임의의 길이 메시지
- 출력: 160비트 메시지 다이제스트
- 입력처리: 512비트 블록단위 처리
Process
- MD5 방식과 동일(step수의 차이, 20step per round)
전체 과정
1 round
Wt=S1(Wt−16⊕Wt−14⊕Wt−8⊕Wt−3)
사용자 인증
단방향 함수를 이용한 인증
- 사용자가 ID,Password를 입력,
- 서버에 저장된 해쉬값과 사용자가 입력한 password의 해쉬값을 비교
대칭키 암호화 방식을 사용한 인증
- 서버에서 난수 R을 선택하여 사용자 A에 전송
- A는 난수 R을 비밀키로 암호화한 C를 서버에 전송
- 서버는 사용자의 비밀키로 C를 복호화하여 R을 구해서 R을 비교
- 안전한 키를 가진다는 전제!
공개키 암호화 방식을 사용한 사용자 인증
- 기존 공개키 암호화의 변형
- 서버가 난수 R을 선택하여 A에게 전송
- A는 자신의 개인키를 통해 C 생성
- 서버는 사용자의 공개키를 통해 복호화
- 기밀성은 보장하지 않는다(누구나 공개키를 통해서 확인 가능)