Skip to content

Latest commit

 

History

History
48 lines (39 loc) · 3.49 KB

password.md

File metadata and controls

48 lines (39 loc) · 3.49 KB

패스워드 암호화 방법

  1. 단순 텍스트
  2. 단방향 해시 함수(one-way hash function)의 다이제스트(digest)
    1. 키 스트레칭
    2. 솔팅

단방향 해시 함수(one-way hash function)의 다이제스트(digest)

  • 단방향 해시 함수 : 특정 알고리즘을 이용하여 데이터를 암호화된 데이터로 변환시켜준다.
  • 이러한 해시 변환을 통해 암호화된 데이터를 다이제스트라고 부른다.
  • 원본 메시지를 알면 암호화된 메시지를 구하기는 쉽지만 암호화된 메시지로는 원본 메시지를 구할 수 없어야 하며 이를 '단방향성'이라고 한다.
  • 예시
    • 패스워드가 "hunter2"라면 해시 알고리즘인 "SHA-256"으로 인코딩하면
    • f52fbd32b2b3b86ff88ef6**c**490628285f482af15ddcb29541f94bcf526a3f6**c**7 로 변환
    • 사용자가 로그인할 때 패스워드를 입력하면, 이를 해시한 값을 저장된 값과 비교하여 일치 여부를 확인할 수 있다.
  • avalanche 효과
    • 입력 값의 일부가 변경되었을 때 다이제스트가 완전히 달라지도록 설계되어 있다.
    • "hunter3"와 "hunter2"의 해시값은 완전히 다르다.
  • 문제점
    1. 인식 가능성(recognizability)
      • 동일 메세지는 동일한 다이제스트 값을 가진다. ⇒ 원본 유추 가능
      • 레인보우 공격(rainbow attack) : 공격자가 전처리(pre-computing)된 다이제스트를 가능한 한 많이 확보한 다음 이를 탈취한 다이제스트와 비교해 원본 메시지를 찾아내거나 동일한 효과의 메시지를 찾을 수 있다.
      • 이와 같은 다이제스트 목록을 레인보우 테이블(rainbow table)이라 하고, 이와 같은 공격 방식을 레인보우 공격(rainbow attack)이라 한다.
    2. 속도(speed)
      • 해시 함수는 원래 암호화가 아닌 데이터 검색을 빠르게 하기 위해 설계된 것
      • 해시 함수의 빠른 처리 속도로 인해 공격자는 매우 빠른 속도로 임의의 문자열의 다이제스트와 해킹할 대상의 다이제스트를 비교할 수 있다.

키 스트레칭(key stretching)

  • 여러 단계의 해시 함수를 적용하여 다이제스트를 생성하는 과정
  • 잘 설계된 패스워드 저장 시스템에서는 하나의 다이제스트를 생성할 때 어느 정도(일반적인 장비에서 0.2초 이상)의 시간이 소요되게 설정한다.
    • 억지 기법 공격(brute-force attack)으로 패스워드를 추측하는 데 많은 시간이 소요되도록 하기 위한 것

솔팅(salting)

  • 솔팅(salting)
    • 해시 함수를 돌리기 전에 원문에 임의의 문자열을 덧붙이는 것
  • 솔트(salt)
    • 단방향 해시 함수에서 다이제스트를 생성할 때 추가하는 바이트 단위의 임의의 문자열
  • 장점
    • {솔트+패스워드}의 다이제스트를 데이터베이스에 저장하고, 사용자가 로그인할 때 입력한 패스워드를 해시하여 일치 여부를 확인할 수 있다.
    • 솔트가 추가된 레인보우 테이블을 새로 생성하여 원래 데이터를 유추하기에는 큰 데이터가 필요하다. 때문에 해킹 시도를 방지해준다.
    • 사용자별로 다른 솔트를 사용한다면 동일한 패스워드를 사용하는 사용자의 다이제스트가 다르게 생성되어 인식 가능성 문제가 크게 개선된다.

Reference

https://d2.naver.com/helloworld/318732