[인터넷보안]암호이론

류명운

·

2014. 10. 7. 15:51

반응형

암호화 기본 기법

  • 대칭키 암호화 기법
  • 공개키 암호화 기법
  • 전자서명 기법
  • 해쉬기법

-> 암호화 기법을 사용하여 보안 서비스를 제공하는 보안 시스템을 구현할 수 있다.


대칭키 암호화 기법 (= 관용 암호화 기법 = 단일키 암호화 기법)

대칭키 암호화 기법의 구성요소 

  • 평문
  • 암호 알고리즘
  • 비밀키
  • 암호문
  • 복호 알고리즘

송신자와 수신자 사이에 공유된 단일키를 통해서 데이터를 암호화 및 복호화 하는 기법

동일한 키가 암복호화를 위해 사용되기 때문에 대칭키라고도 함

공개키 알고리즘에 비해 상당히 빠르고 대용량의 데이터를 처리하기에 적합

P:평문 / C:암호화문 / K:비밀키

암호화 -> C=E(K,P)

복호화 -> P=D(K,C)


대칭키 알고리즘은 대부분 한번에 한 블록씩 암호화를 하는 블록 암호화 방식을 사용함(반면 한번에 한 비트씩 암호화 하는 방식을 스트림 암호화 방식이라 함)

블록 암호화 방식(예:RC2,DES,3DES,Rijndael 등)은 n 바이트의 입력 블록을 암호화된 블록으로 변환함

닷넷 프레임워크에서는 (닷넷 클래스 라이브러리와 CAPICOM) 블록 암호화 방식만을 지원하며 특히 네 가지 블록 암호화 모드 중에서 cipher block chaining(CBC) 모드만을 지원함

* ECB(electronic codebook mode), CFB(cipher feedback mode), OFB(output feedback mode)

CBC 모드를 사용하기 위해 비밀키와 초기화 벡터(initialization vector(IV))가 필요함


 ECB Mode

암호화 키처럼 짧은 자료에 적합한 모드로 단순하고(누구나 구현가능) 병렬암호화가 가능함

암호문과 평문이 1:1로 대응되기 때문에 알려진 평문공격에 취약 특히, 긴 자료의 경우, 동일한 내용의 블록이 반복될 가능성이 큼 -> 평문의 패턴을 유추할 수 있음

 암호화: C = E(K, P)

 복호화: P = D(K, C)

 CBC Mode

 암호문 블록을 마치 체인처럼 연결시켜서 사용한다. 

 암호화: C = E(K, P || C -1)

 복호화: P = D(K, C) || C -1

 CTR Mode

 1씩 증가해 가는 카운터를 암호화해서 키 스트림을 만들어 내는 스트림 암호이다.

 암호화: C = P || E(K, CTR) where CTR = CTR-1 +1

 복호화: P = C + E(K, CTR)


대칭키 암호화 기법: 키 길이와 암호화 강도

  • 전사공격 (가능한 숫자 문자 다 대입해보는거)

->암호화 알고리즘이 유일하게 허용하는 공격

->키 길이와 전사공격 비용은 비례함(n 비트 > O(2^n))

  • 암호화 알고리즘의 목표는 전사공격의 비용이 크도록 하는 것

->DES의 경우 56비트의 제한된 키 길이로 인해 안전하지 않다고 알려짐 (표준:128비트로 바뀜)

AES -> RIJNDEAL 이 최종적으로 채택됨


국산 암호화 알고리즘 : SEED(정보보호진흥원), ARIA(국보연&국정원)


대칭키 암호화 기법에서 송신자와 수신자는

 1)사전에 비밀키와 초기화 벡터를 알아야 한다.

 2)비밀키를 안전하게 보호해야 한다.

->키분배와 확장성 문제가 발생한다.

 키분배 문제

닭이 먼저냐 계란이 먼저냐의 문제 생성한 비밀키를 어떻게 안전하게 공유할것인가에 대한.. ->제 3자를 이용하는 방법이 제안됨 ->키 분배센터를 이용하자

 확장성 문제

n명의 사용자가 서로 안전한 통신을 하기 위해서 n(n-1)/2키가 필요함


공개키 암호화 기법(비대칭키 암호화 기법)

-중간자공격에 취약함(공개키인증을 통하여 중간자공격을 방어할 수 있다)

-데이터의 암복호화를 위해 공개키와 개인키을 사용함

  • 개인키: 공캐키쌍의 소유자만이 사용할 수 있는 키
  • 공개키: 모두에게 공개되어 누구나 사용할 수 있는 키
  • 공개키는 전사공격에 덜 취약함 / 상당히느림 / 대용량에부적합

 일반적인 통신

 A, B

 A->B:공개키를 요청

 B->A:Pub      / A에게 공개키를 반환

 A->B:C=E(Pub, M)  / 메시지 M을 B의 공개키로 암호화한 C를 B에게 전송

 B:M=D(PRb, C)  / A에게 받은 C를 자신의 개인키로 복호화하여 메시지 M을 획득

 중간자 공격(X 맨이 중간이 껴들음)

 A->B:공개키를 요청

 B->X:Pub

 X->A:PUx

 A->X:C1=E(PUx, M)

 X:M=D(PRx, C1)

 X:C2=E(PUb, M')

 B:M'=D(PRb, C2)


하이브리드 과정 

 A,B

 Kab: A와 B의 세션키

 A:임의의 Kab를 생성

 A:C=E(Kab, M)         / 메시지 M을 Kab로 암호화

 A:EKab=E(PUb, Kab) / 세션키 Kab를 B의 공개키로 암호화

 A->B:C, EKab          / B에게 C와 EKab를 전송

 B:Kab=D(PRb, EKab)

 B:M=D(Kab,C)


인증

대칭키 암호화 인증과정(키를 두사람이 공유하기때문에 둘다 만들수 있어서 부인공세가 안됨)

(1)A가 B에게 메시지 M을 서명하는 과정

(2)A:C=E(Kab,M)

(3)A->B:M,C

(4)서명검증

(5)B:M=D(Kab, C)

(6)B:Check if M=M

공개키만이 전자상거래를 지원할 수 있다. 인증과정에서 부인봉쇄가 되기때문에


 디피헬먼의 키교환

 Alice:개인키(x), 공개키(Sx = q^x mod p)

 Alice->Bob: Sx, q, p

 Bob의 공개키:Sy=q^y mod p

 /앨리스와 밥은 서로 공개키를 갖고있음

 /Kab를 만들자-> Sy^x mod p = Sx^y mod p = q^yx mod p

 Kab=(Sy)^x mod p = (q^y mod p)^x mod p = q^yx mod p

 Kab=(Sx)^y mod p = (q^x mod p)^y mod p = q^xy mod p

 Bob:개인키(y), 공개키(Sy)


무결성, 데이터인증, 부인공세를 제공하는 기술

해쉬

해쉬함수는 임의의 데이터를 고정된 길이의 바이트열로 변환함

해쉬값은 통계적으로 유일함(어떤데이터가 들어오던 아웃풋이 같음)

해쉬함수는 일방향 함수(x로 y를 만들었는데 y로 x를 추적할 수 없음)


D=H(M)  / 메시지 M을 해쉬함수로 돌렸더니 결과값 D가나옴 

무결성을 입증하는 순서 

 A->B : M, D=H(M)

B : Check if D=?H(M)

 Kab : A와 B의 비밀키

 A->B : M, E(PRa, H(M))

 B : check if H(M) =? D(PUa, E(PRa,H(M)))


전자서명

전자서명은 메시지의 송신자를 인증하고 메시지의 무결성을 보호함

공개키 암호화 기법이 전자서명을 계산하는데 주로 사용됨

  • 개인키를 통해 전자서명을 생성 / 공개키를 통해 전자서명을 검증

전자서명은 원본 메시지의 해쉬값을 개인키로 암호화한 결과값

전자서명의 검증은 전자서명을 송신자의 공개키로 복호화하고 그 결과값을 원본메시지의 해쉬값과 비교함

A : S=H(M)

A : E(PUa,M) / 전자서명

A->B : M, E(PUa,M)

B : J=H(M)

B : check if J =? D(PRa, (E(PUa,M)))  


해쉬와 전자서명

 A : S=E(PRa, H(M)) / 전자서명

 A : Kab생성

 A->B : E(Kab,M||S)||E(PUb,Kab)

 B : Kab= D(PRb,(E(PUb, Kab)))

 B : M||S = D(Kab, (E(Kab,M||S)))

 B : Check if H(M) =? D(PUa, S)


메시지인증

MAC = 전자서명과 달이 부인봉쇄 불가(양쪽다 만들수 있기 때문에)


최근 암호화 하지 않는 기술에 힘쓰고 있음
  •  암호 소프트웨어는 속도가 매우 느리다.
  •  암호 장비의 값을 무시하지 못한다.
  •  암호 장비는 대용량 자료처리에 적합하도록 제작된다.
  •  암호 알고리즘은 특허권에 의해 보호된다.
  •  암호 알고리즘은 수출에 제약이 있다 


반응형