암호화

MyeonghoonNam·2021년 8월 2일
1
post-custom-banner

암호화

  • 평문을 해독할 수 없는 암호문으로 변환하는 것을 의미한다.

  • 단방향(해싱) 암호화와 양방향 암호화가 존재한다.


단방향 암호화

First slide

  • 해시 알고리즘을 이용하여 평문을 복호화 할 수 없는 형태로 암호화 한다.
  • 대표적으로 MD5와 SHA 알고리즘이 있다.
  • 사용자 비밀번호 등을 저장할 때 자주 사용한다.
  • MD5와 SHA-0, SHA-1은 해시 충돌이 발생할 수 있는 취약점이 있기에 사용을 권하지 않는다.

단방향 암호화의 취약점

  • 복호화가 불가능하지만 Rainbow Table을 통해 원문을 알아낼 수 있다.

    Rainbow Table ?

    평문과 해시 함수로 만든 문자열을 모두 저장시켜 놓은 테이블을 말한다.

  • 따라서 불의의 사고로 암호화된 데이터를 탈취당하더라도 원문을 알아 낼 수 없도록 조치를 취해야한다.

  • Salt, Key stretching 등 을 이용하여 해결할 수 있다.


Salt

img

  • 평문에 임의의 문자열을 추가하여 암호화하는 방법을 말한다.
  • 재료에 소금을 곁들여 먹는 것에 비유한 방법이다.
  • 128bit 이상의 문자열로 만드는 것을 권장한다.
  • 사용자마다 다른 각각의 Salt를 사용하면 더 안전한 방법이 된다.

Key stretching

img

  • 해시를 여러 번 반복하여 원문을 알기 힘들게 만드는 방법이다.
  • 예를 들어 해시를 천 번 반복한다면 해커는 해시를 천 번 반복하지 않는다면 원문을 알 수 없다.
  • 일반적인 시스템에서 0.2초 이상 해시가 반복되면 안전하다고 한다.

Salt와 Key stretching을 이용하는 알고리즘

  • 직접 구현하는 것 보다 이미 검증받은 알고리즘을 사용하는 것이 안전하다.
  • 대표적으로 PBKDF 2 알고리즘과 bcrypt 알고리즘이 있다.
    • PBKDF 2
      • NIST(미국표준기술연구소)에서 승인된 알고리즘
      • PBKDF 2 를 통해 다양한 DIGEST를 생성하여 동일한 비밀번호에 대해 항상 동일한 DIGEST가 생성하는 해시 함수의 문제점을 보완한다.
      • 여기서 DIGEST란 해시 함수라는 수학적인 연산을 통해 생성된 암호화된 메시지를 의미합니다.
    • bcrypt
      • 비밀번호 저장을 목적으로 탄생하여 비밀번호 저장에 관해서는 PBKDF 2 보다 유리한 암호화 알고리즘이다.
      • OpenBSD(오픈소스 운영체제)에서 기본적으로 사용하고 있는 알고리즘이다.
  • 두 알고리즘 모두 해시와 Salt, Key stretching을 혼합하여 사용한다.

양방향 암호화

img

  • 평문을 복호화 할 수 있는 형태로 암호화하는 방법
  • 대칭키와 비대칭키 알고리즘으로 나뉜다.
  • 대표적인 대칭키 알고리즘인 AES와 비대칭키 알고리즘인 RSA로 나뉜다.

대칭키 암호 알고리즘

  • 대표적으로 AES(Advanced Encryption Standard)가 있다.
  • 같은 키를 이용하여 암호화와 복호화가 가능하다.
  • 모든 사람이 대칭키를 알아야 하므로 보안에 취약할 수 있다.

비대칭키 암호 알고리즘

  • 대표적으로 RSA(Rivest, Shamir and Adleman)가 있다.
  • 이름이 특이한데 RSA 알고리즘을 만든 사람들 3명의 이름을 따서 만들었기 때문이다.
  • 공개키와 개인키 두 가지 키가 존재한다.
  • RSA는 소인수 분해를 기반으로 만들어진 알고리즘이다.
  • 대칭키 암호화 만으로는 다수가 사용하기에 제한이 있어서 탄생하게 된 알고리즘으로 모든 사람이 알아도 상관없는 공개키와 나만 알 수 있는 개인키를 통하여 다수가 사용하기에 용이하다.
  • 보내는 사람은 공개키를 이용하여 암호화하고 받는 사람은 개인키를 통하여 복호화하여 평문을 확인할 수 있다.
  • 이러한 방식은 현대의 HTTPS에서도 사용하는 방식이다.



참고자료

profile
꾸준히 성장하는 개발자를 목표로 합니다.
post-custom-banner

0개의 댓글