2020. 1. 16. 11:43ㆍSecurity/알고리즘&암호학
* 비밀키 분배의 어려움
물리적인 방법으로 전달
- 링크 암호화에서 적용 가능(인공위성)
- 단대단 암호화에서 적용 어려움
이전의 키를 사용하여 암호화된 새로운 키를 전송
- 링크 암호화나 단대단 암호화 모두 적용 가능
- 공격자가 어떤 한 키를 안다면 이후의 모든 키가 노출
제 3자(키 분배 센터(KDC))를 통하여 키 분배
- 단대단 암호화에서 주로 사용
- 사용자는 키 분배 센터와 유일한 키를 공유
- 대표적으로 KERBEROS가 있음
* KDC를 이용한 비밀키 분배
KERBEROS를 이용한 키 분배 방법
- client-server 모델(A가 client, B가 server이다). 여기서 client는 프로세스이다.
- A는 KDC와 비밀키(마스터키)를, B는 KDC와 비밀키(마스터키)를 나눠 가짐.
- 속도 지연이 거의 없다.
1. Request || ID(A),A,B : 나(A)의 신원정보(ID(A)), 내가 누구와 통신하고 싶은지 알려주고 KDC에게 세션 키를 요청
2. EKA[SK,ID(B),T] : KDC가 SK, ID(B), T를 보낼때 SK와 T는 노출되면 안되기 때문에 KA로 암호화해서 보내준다.
3. EKB[SK,ID(A),T] : KDC가 SK, ID(A), T를 보낼때 SK와 T는 노출되면 안되기 때문에 KB로 암호화해서 보내준다.
4. ESK[ID(A),T] : T는 응답자가 진짜 B인지 확인하기 위해서 보냄. SK는 내가 A임을 알려주기 위해서 보냄
5. ESK[ID(B),T+1] : T+1일과 ID(B)를 통해서 A는 B의 신원을 확인.
6. 서로의 신원이 확인 되었기때문에 세션키를 가지고 암호화 통신을 시작, 통신이 완료될 경우 SK는 버린다.
- ID(n) : n을 식별할 수 있는 고유 정보. IP일수도 있고 상황에 따라 다르다
- KA : A의 마스터 키
- KB : B의 마스터 키
- SK : 세션키. A와 B가 통신하기 위해 필요하며 항상 비밀키이다. 세션키를 나눠 가지는 것이 키분배의 궁극적인 목적.
- 1은 난수를 받았을때 하기로 약속된 연산을 의미. 네트워크에 같은 암호문이 계속해서 통신되는 것을 방지하고 싶어서 약속된 연산을 더 해준다.
SESAME를 이용한 키 분배 방법
- A, B가 공개키 기관의 가입자(신원정보와 공개키가 등록되어있는)인 경우에만 인증이 가능
- 가입자들도 공개키 기관의 공개키를 가지고 있어야 함.
- 공개키는 네트워크 상에 공개되어 있을 수 있지만 진짜 그 사람의 공개키인지 확신할수 없기에 공개키 기관이 필요
(1) Request || Time1 : A가 공개키 기관에 B의 공개키를 보내달라고 요청
(2) E(PRau[PUb || Request || Time1]) : 공개키 기관의 개인키로 B의 공개키를 암호화해서 전송. A가 공개키 기관의 공개키로 암호문을 풀어서 근원지 증명(암호문이 공개키 기관이 수신자임을 확인)을 한다.
(3) E(PUb[IDA || N1]) : B의 공개키로 A의 ID(a)와 N1을 암호화해서 전송. N1은 진짜 B인지 확인하기 위해 보낸다.
(4) Request || Time2 : B가 공개키 기관에 A의 공개키를 보내달라고 요청
(5) E(PRau[PUa || Request || Time2]) : 공개키 기관의 개인키로 A의 공개키를 암호화해서 전송. B가 공개키 기관의 공개키로 암호문을 풀어서 근원지 증명(암호문이 공개키 기관이 수신자임을 확인)을 한다.
(6) E(PUa[N1 || N2]) : A의 공개키로 N1와 N2를 전송. 이때 A는 개인키를 통해서 메세지를 보낸 이가 B임을 확인하며 동시에 N2는 진짜 A인지 확인하기 위해 보낸다.
(7) E(PUb[N2]) : A가 개인키로 암호문을 푼뒤 B의 공개키로 N2암호화해서 B에게 보낸다.(자신이 A임을 증명)
(8) E(PUb[EPRa [Ks]]) : 세션키를 A의 비밀키로 암호화, 다시 B의 공개키로 암호화해서 B에게 전송해서 세션키를 나눠갖는다.
여기까지 서로의 신원을 확인했기 때문에 이후 세션키를 가지고 암호화 통신을 시작한다.
PU : 공개키
PR : 개인키
Time1: 로그 및 시간 정보.
au : 공개키
ID : 신원정보
N : 난수
Ks : 세션키. 세션키로 사용하는 것은 전부 비밀키이다.
* Hash 함수
해쉬 함수의 이해
- 임의의 길이(M)를 취해서 정해진 크기(h)의 Message Digest를 만드는 one-way function(H)(일방향 함수).
- 일방향 함수이기때문에 복호화가 불가능. M이 바뀌면 h가 바뀌는데 전혀 예상할 수 없다. 전혀 예상할 수 없기때문에 우연히 같은 값이 나올 수도 있다.
- 메시지 인증 코드에 대한 변형, 메시지의 모든 비트들에 대한 함수
- 디지털서명, 인증, 등의 서비스 제공.
- 원문에 대한 무결성을 확인할때 사용.
해쉬함수의 요구 조건
- 어떤 크기의 메시지 M에도 적용 가능
- H는 정해진 크기의 hash code를 만듦.
- H(M)은 어떤 주어진 M에 대해서도 계산하는 것이 쉽다.
- 주어진 hash code h에 대해, H(M) = h인 M을 찾는 것이 계산적으로 실행불가능(one-way). 즉, 해시코드만으로 원문을 알아낼 수 없다.
단순 hash함수
메시지를 n비트 블록으로 m개로 나눈 뒤에, 나눈 블록끼리 XOR하여 출력되는 블록을 해쉬로 함. 딱 나눠떨어지지 않는 경우가 대부분이기때문에 패딩을 하면 된다.
hash 함수의 종류
- 같은 결과값의 문자열이 나오는 충돌문제가 있지만 주로 MD5를 사용.
- SHA-1의 메시지 다이제스트 길이인 160비트는 통상적으로 길다고 판단되어 사용하지 않는다.
'Security > 알고리즘&암호학' 카테고리의 다른 글
Kleopatra를 이용한 암호문 송수신 (2) | 2020.01.28 |
---|---|
암호학 (6)전자 서명&인증서 (0) | 2020.01.21 |
암호학 (4)공개키 암호 (0) | 2020.01.14 |
암호학 (3)대칭키(비밀키) 암호 (0) | 2020.01.13 |
암호학 (2)고전적 암호 (0) | 2020.01.07 |