[F-Lab 챌린지 20일차] 암호화 알고리즘

성수데브리·2023년 7월 18일
0

f-lab_java

목록 보기
17/73

학습 목표


  • 암호화 알고리즘 조사
  • 종류별 특징
  • 패스워드 암호화에 적합한 것

학습 결과 요약


  • 비밀번호는 복호화할 수 없게 단방향 암호화를 해야한다.
  • 비밀번호 암호화에는 해시 함수를 사용하는데 원문을 알아내지 못하도록 salting 이나 key stretching 으로 다이제스트 생성 로직을 강화한다.

학습 내용


암호화란?

메세지 내용이 불명확하도록 평문(plain text)을 재구성하여 암호화된 문장(Cipher text)으로 만드는 과정이다.

https://www.digicert.com/faq/cryptography/what-is-ssl-cryptography

https://www.digicert.com/faq/cryptography/what-is-ssl-cryptography

암호화 분류

양방향

암호화된 암호문은 복화화할 수 있는 알고리즘이다.

  • 대칭키
    • 암호화키=복호화키
    • 암호화와 복호화에 같은 키를 사용한다.
  • 비대칭키
    • 암호화키 ≠ 복호화키
    • 암복호화에는 서로 다른 키를 사용한다.

      비대칭키는 공개키(Public Key)와 개인키(Private Key)가 하나의 쌍을 이루고 있다. 다른 사람들에게 공개된 키로서 정보를 암호화할 수 있는 공개키와 사용자 본인만 알고 있어서 암호를 풀 수 있는 키인 개인키는 하나의 쌍을 이루고 있다.

      비대칭키를 사용한 암호화 방식에는 공개키로 암호화를 하는 경우개인키로 암호화를 하는 경우로 구분할 수 있다. 공개키로 암호화를 선택했다면 데이터 보안에 중점을 둔 것이고, 개인키로 암호화를 진행했다면 안전한 전자서명을 통한 인증 과정에 중점을 둔 것으로 해석할 수 있다.

      출처 : http://wiki.hash.kr/index.php/%EB%B9%84%EB%8C%80%EC%B9%AD%ED%82%A4

    • 종류 : RSA

단방향

  • HASH
    • MDC :
      • 메세지 인증과 무결성 검사 용도
      • 종류 : SHA-1, MD5, SHA-2 등이 있음
    • MAC
      • 메세지 인증 용도
      • HMAC

개인정보 관련 법령

제7조(개인정보의 암호화)
② 개인정보처리자는 비밀번호 및 바이오정보는 암호화하여 저장하여야 한다. 다만, 비밀번호를 저장하는 경우에는 복호화되지 아니하도록 일방향 암호화하여 저장하여야 한다.

비밀번호는 단방향 암호화해야 하는 이유

  1. 패스워드는 생성자 본인만 알고있어야 한다.
  2. DB 해킹이나 어플리케이션 서버가 해킹되면 코드 노출로 어떤 암호화를 사용했는지 노출된다.

→ 유저가 입력한 패스워드 평문으로 해싱하여 해쉬값을 비교하므로 단방향 암호화된 암호문이 노출되어도 평문을 알지 못하면 절대 로그인 할 수 없다.

단방향 암호화 알고리즘

Hash

  • 해쉬 알고리즘은 임의의 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수이다.
  • 원래 입력값을 찾아내는 것은 불가능하다.
  • 해싱된 결과값을 다이제스트라 한다.
  • 해쉬 함수의 취약점
    • Brute force attack

      모든 패스워드 경우의 수를 대입하는 것이다.

      New 25 GPU Monster Devours Passwords In Seconds에 따르면 md5의 경우 25개의 GPU로 초당 1800억개의 대입이 가능하다. 단순히 영문 대소문자, 숫자만 조합한 8자리 고정 패스워드라면 62^8개의 조합이 가능한데,  이 정도면 62^8 / 1800억 = 1213초, 불과 20분이면 다 크랙되는 것이다.

      출처 : http://www.codeok.net/패스워드 보안의 기술>

    • Rainbow table

      미리 가능한 패스워드 조합을 해싱한 결과 테이블을 가지고 비교하여 평문을 알아내는 방법이다.

      MD5 는 이미 rainbow table 이 존재한다고 한다.

  • Brute force attack & Rainbow table 취약점을 위한 방안
    • Rainbow table → 인식 가능성 : Salting

      Salt 란 원문 그대로 해싱 함수 입력값으로 사용하지 않고 바이트 단위의 임의의 문자열을 추가하는데 이때 사용되는 임의의 문자열이다.

      Salting 이란 원문에 Salt 를 추가하여 다이제스트를 생성하는 것이다. Salting 을 사용하면 패스워드 원본이 노출되도 Salt 값을 알지 못해 DB 에 저장된 다이제스트를 생성하기 어렵다

    • Brute force attack → 속도 : Key Stretching

      모든 패스워드 경우의 수를 대입하려면 최대한 빠르게 많이 돌려야한다.

      최대한 빠르게를 못하게 하기 위해 다이제스트 생성 시간을 오래 걸리도록 하는 방법이다.

      최근에는 일반적인 장비로 1초에 50억 개 이상의 다이제스트를 비교할 수 있지만, 키 스트레칭을 적용하여 동일한 장비에서 1초에 5번 정도만 비교할 수 있게 한다.

      출처 : https://d2.naver.com/helloworld/318732 >

단방향 해시 함수 종류

  • MD5, SHA-1, SHA-256, SHA-512
  • 이 알고리즘들의 목적은 메세지 인증과 무결성 체크라서 패스워드 인증에 사용하면 brute force attack, rainbow table 로 뚫릴 수 있는 위험이 있다.

key derivation function

이를 해결하기 위해서는 key derivation function을 사용하는 것을 권장한다.

Adaptive Key Derivation Functions ?

adaptive key derivation function은 다이제스트를 생성할 때 솔팅과 키 스트레칭을 반복하며 솔트와 패스워드 외에도 입력 값을 추가하여 공격자가 쉽게 다이제스트를 유추할 수 없도록 하고 보안의 강도를 선택할 수 있다.

종류

  • PBKDF2
    • 솔트를 적용한 후 해시 함수의 반복 횟수를 임의로 선택할 수 있다. PBKDF2는 아주 가볍고 구현하기 쉬우며, SHA와 같이 검증된 해시 함수만을 사용한다.
  • bcrypt
    • Java 라이브러리 지원
    • 해싱 결과로 반환된 String 의 길이는 매번 60으로 동일하다
    • 입력값의 크기가 72 bytes 까지만 가능함
  • scrypt

참고


왜 Password hashing시 Bcrypt 가 추천되어질까?

PBKDF2 비밀번호 암호화 구성의 알려진 문제점과 고려사항

지식덤프

What is a key derivation function (KDF) and how do they work?

http://www.codeok.net/패스워드 보안의 기술

SHA1 / SHA2 알고리즘

ITWorld 용어풀이 | 암호화 해시 함수

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

너무 좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

아주 유용한 정보네요!

답글 달기