목차

단방향 암호화 Hash함수

🗓️

Hash 함수

  • 해시함수는 메시지 길이가 길던, 짧던 항상 동일한 길이의 메시지를 만들어내는 함수다.
  • 메시지를 일정한 길이의 블록으로 분할 후 해시 함수에 입력한다.
  • 짧고 일정한 길이의 메시지 다이제스트 (160,256,512bit)생성
  • 대표적인 Hash함수 : MD5, SHA-256, SHA-512

1) Hash 함수의 요구사항

  • 어떤 크기의 데이터 블록이든지 적용 가능해야 한다.
  • 일방향성을 만족해야한다 = 메시지 다이제스트로부터 원래의 메시지를 만들어낼 수 없어야 한다. → 복호화 불가능
  • 강한 충돌 회피성 : 다른 데이터에 의해 생성된 메시지 다이제스트는 동일하면 안된다.

2) SHA

SHA블럭 길이다이제스트 길이라운드 수워드 크기
SHA-15121608032
SHA-2565122566432
SHA-51210245128064
  • 해시값은 데이터가 조금만 바뀌어도 완전히 다를 수 있다. → 눈사태 효과
sha = hashlib.new('sha256')
sha.update("love".encode("utf-8"))
print(sha.hexdigest()) # 686f746a95b6f836d7d70567c302c3f9ebb5ee0def3d1220ee9d4e9f34f5e131
sha.update("love.".encode("utf-8"))
print(sha.hexdigest()) # 1a89f4362e9bc0edcbe73cc8c9d9197a1c9542a8fa620c4a94daa40c7df7b756

점 하나로 다이제스트가 완전히 바뀐다.

  • 아래와 같이 빈 문자열에도 해시값이 있다.
sha.update("".encode("utf-8"))
print(sha.hexdigest()) # 1a89f4362e9bc0edcbe73cc8c9d9197a1c9542a8fa620c4a94daa40c7df7b756

3) MD5

  • 128비트 hash함수다.
  • 다이제스트가 32비트의 길이로 SHA보다 짧다. 그래서 다이제스트가 겹치는 상황이 발생할 수 있다. → 그래서 현재는 사용하지 않는다.
  • 이것을 비둘기 집의 원리라고 한다. n개의 집에 n+1마리의 비둘기가 들어간다면 한집에 두마리 이상 들어간 집이 적어도 하나는 있다.