1 minute read

Mention : Encryption?🔐 Hash? Salt?🧂

  • 암호화
    • 어떠한 데이터를 암호화시켜 다른 이들이 직접 그 의미를 알지 못하도록 하는 작업
  • 복호화
    • 암호화 되어있는 데이터를 해독하는 작업
  • 해싱과 암호화는 암호학적으로 본다면 차이가 있다. 가장 큰 차이는 ‘방향성’ 이다.
  • 단방향
    • 복호화가 불가능하다는 것이고 이를 ‘해싱’ 이라고 부른다.
  • 양방향
    • ‘해싱’과는 다른 ‘암호화(Encryption)’ 이며 역으로 복호화도 가능하다.
  • 단방향 해시 함수 (One-Way Hash Function)
    • 어떤 수학적 연산 또는 알고리즘에 의해 원본 데이터를 매핑시켜 완전히 다른 암호화된 데이터로 변환시키는 것이다. 이를 다이제스트라고 부른다. 단방향으로 원본 데이터를 구할 수 없다. 대표적인 해시 함수는 SHA, MD, HAS, WHIRLPOOL이 있다.

      https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDMi4A%2FbtqEnh26qKT%2F0uDU6AK5mqEE3XGHhoWL41%2Fimg.png

  • 다이제스트(digest)
    • 해시에 의해 암호화된 데이터
  • 단방향 해시 함수의 단점
    • 동일한 메세지는 동일한 다이제스트를 갖는다. 해커들은 여러 값들을 대입해보면서 얻었던 다이제스트들을 모아놓은 리스트에서 메세지의 원문을 찾는다. 이러한 다이제스트들의 테이블을 레인보우 테이블이라고 한다.
    • 무차별 대입 공격(브루트포스)
      • 해시 함수는 원래 빠른 데이터 검색을 위한 목적으로 설계되었기 때문에 원문과 다이제스트는 금방 얻을 수 있다. 해커들은 ‘상징성’있는 문자를 추려서 조합하여 해킹을 시도한다.
  • 단방향 해시 함수 보완
    • 해시 함수 여러 번 수행(Key Stetching)
      • 다이제스트를 여러 번 해시로 암호화시키는 작업이다. 브루트포스를 무력화 시킬 수 있다.

      https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTUkQh%2FbtqEmwtzk5G%2F7ls4aF6Plv0rDigk9rEtDK%2Fimg.png

    • 솔트(Salt)
      • 해시함수를 돌리기 전 원문에 임의의 문자열을 덧붙이는 것이다. 한 명의 패스워드가 유출되더라도 다른 사용자는 안전할 수 있다.
      • 솔팅할 문자열이 간단하거나, 짧으면 큰 의미는 없어진다. 각 사용자별 고유의 솔트를 갖고있어야 하며, 암호학적으로 안전한 난수 생성기를 사용하여 예측가능성을 줄여야한다.

      https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpJiLF%2FbtqEnIT4GY5%2F26i7312G37rzIsA9VJFpC1%2Fimg.png

      https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIXlg8%2FbtqEninP4Tk%2FWX8MQoYGMlWVufAcoHJAZk%2Fimg.png

  • Summary
    • 사용자의 패스워드는 단방향인 해싱, 양방향인 암호화로 전송 및 보관이 가능하다. 해싱은 복호화가 불가능하며, 암호화는 복호화가 가능하다. 따라서, 대부분의 개발자들은 단방향 해시로 안전하게 패스워드를 전송 및 보관하려고 한다. 단방향 해시 함수는 어떤 수학적 연산 및 알고리즘에 의해 원본 데이터를 완전히 다른 암호화된 데이터로 변환시키는 것이다. 이렇게 변환된 데이터를 다이제스트라고 한다. 단점으로는 동일한 메세지는 동일한 다이제스트를 갖고있어 레인보우 테이블을 통해 메세지의 원문을 찾을 수 있다. 또한 상징성 있는 문자를 추려서 조합하여 브루트포스 공격을 당할 수 있다. 단방향 해시 함수를 보완하기 위해서 해시 함수를 여러번 수행 (Key Stretching)하거나 해시함수를 돌리기 전 원문에 임의의 문자열을 덧붙이는 솔트를 사용하여 보완할 수 있으며, 둘을 모두 사용할 수 있다.

Reference 📚

https://st-lab.tistory.com/100

Leave a comment