mimimin 2022. 5. 3. 17:31

대칭키(기밀성), 공개키(인증, 기밀성), 해쉬함수(무결성)

 

1) 대칭키 (= 비밀키, 단일키, 세션키)

  • 장) 속도가 빠름 → 데이터 암복호화 유리
  • 단) 키 전달 어려움, 키 개수 많음(N(N-1)/2)
  • ex) DES, 3DES, AES(표준 대칭키)
  • 국내대칭키: SEED, ARIA, HIGHT, LEA → 뒤에 3개는 경량 암호화로 모바일 시대를 위해 만든 것
  • 유명한 대칭키: RC6, Blowfish 등
  • 대칭키의 원리: 치환, 순열(전치), 매트릭스 등 → AES는 SPN구조(Substitution(치환), Permutaion(순열, 전치), Network)

 

2) 공개키

  • 장) 인증 가능, 기밀성 제공, 키 전달의 문제 해결(누구나 개인키 공개키 한쌍 가짐 → N명의 사용자, 2N개 필요)
  • 단) 대칭키에 비해 속도가 100 ~ 1000배 느림
  • 따라서 대칭키(=세션키)를 암/복호화 할 때 공개키 사용
  • Diffie-Hellman: 세션키를 교환하지 않고, 자신의 개인키와 상대방의 공개키를 연산을 통해 세션키를 생성, 이산대수 (단점: MITM - Man In The Middle attack)
  • RSA: 소인수분해의 어려움에 근거, 양방향 암호화 지원(개인키로 암호화하면 공개키로 복호화(인증), 공개키로 암호화하면 개인키로 복호화)
  • ECC(타원 곡선 암호화): 짧은 키 길이로 강력한 암호화 지원 → 하드웨어에서 동작(모바일 등)
  • cf) 암호화 강도 비교: ECC160bit와 RSA1024bit와 비슷한 수준의 암호화 제공
  • 키가 길어지면 연산량이 많아 발열 등 발생 가능

3) Hash Function

  • 특징: 고정길이 출력, 역연산 불가, 충돌방지
  • MD5, SHA1 → 일부 크래킹 가능 → 사용하면 안됨(인증 안해줌), SHA-2(256bit): 공동인증서, Bitcoin에서 사용
  • 무결성(Integrity): 내용이 바뀌지 않았다는 것 증명 → 원문이 바뀌면 해쉬값이 바뀜(→ 해쉬값만 보고도 확인 가능)

 

4) 전자서명

  • 원문의 해쉬값에 송신자의 개인키로 서명
  • 무결성, 인증, 부인방지 (기밀성은 제공하지 않음)
  • 검증: 송신자의 공개키로 서명을 복호화하면 헤쉬값이 나옴, 원문의 해쉬값을 계산해서 비교해보면 됨

 

5) 인증서

  • 공개키의 해쉬값에 인증기관의 개인키로 서명
  • 공개키의 주인을 확인해주는 효과 → 믿고 사용 가능
  • 실제 인증서 확인: 인터넷 옵션 > 내용 > 인증서

실제 인증서 확인 가능

 

6) PKI(Public Key Infrastructure)

  • 최상위 인증기관(Root CA): 인증기관을 인증
  • 인증기관(CA): 인증서를 발급
  • 등록기관( RA): 인증기관의 인증서 발급을 위해서 사용자 검증, 서류 접수 등

 

7) SSL(Secure Socket Layer) (Socker: IP 주소 + Port 번호 → 비표준용어)

  • Netscape에서 웹서버와 웹브라우저간 암호화를 위해서 많듦 → 취약점이 너무 많았음
  • 표준화하면서 이름을 TLS(Transport Layer Security)로 업그레이드(취약점 해결)
  • 웹서버의 인증서(공개키 + 기타정보)를 클라리언트에 제공(좌물통 모양이 보임, TCP443포트 사용)
  • 웹서버는 세션키를 생성해서 웹서버의 공개키로 암호화해서 제공
  • 양쪽이 모두 세션키를 가지게 됨 → 데이터를 세션키로 암호화해서 양방향 기밀성 가능

 

 

[해시 함수 실습]

kali linux에서 해시함수 실습 가능

  • md5

  • sha1

  • sha256