Security #1 :: 해시 (Hashing)

해다·2022년 4월 9일
0

etc.

목록 보기
12/21
post-thumbnail

🙊 잘못된 정보는 댓글로 지적 부탁드립니다~


❓해시가 뭐지?

언뜻 봐서는 해시태그랑 관련이 있을 것 같은데 해시태그는 해시(#)를 태그여서 해시 태그이고, 여기서 말하려고 하는 해시와는 완전히 다르다. 해시(Hash)는 해시 함수(Hash Funtion)/해시 알고리즘(Hash Algorithm)을 지칭하는 말이고, 이 함수는 임의 길이의 데이터를 고정 데이터 길이로 매핑하는 함수를 말한다. 이 함수에 의해서 얻어지는 값을 해시 값이라고 하는데 이러한 알고리즘을 이용한 암호화 해시 함수(Cryptographic Hash Function)이 탄생했다!
SHADSA 등 현재도 해시 함수를 이용한다.

(다이제스트는 해시 함수를 통해서 암호화된 메시지를 말한다.)

🤔 근데 암호화가 정확히 어떤 개념이야?

말 그대로... 정보를 암호화된 형태로 변경하는데 그때 특정 알고리즘을 이용해서 암호화한다는게 중요한 특징이라고 할 수 있다. 암호화한 정보는 이것을 짚어가면서 풀어가는 복호화 과정을 거쳐야 다시 읽을 수 있다.
암호화에는 단방향 암호화와 양방향 암호화가 있다.

  • 단방향 암호화 : 이 암호화 방식은 보안성이 높아서 비밀번호 관리에 많이 쓰이는데, 단방향으로 사용하기 때문에 원래대로 돌이킬 수 없는 상태가 된다. 그러면 비밀번호 검증이 힘들 수도 있지만 이 때에는 비밀번호 인풋 값과 서버에 저장된 값에 대해 따로 비교와 검증이 이뤄진다.
  • 양방향 암호화 : 암호화된 정보를 다시 풀어서 봐야할 경우에 사용하는 암호화 방식이다. 단방향 암호화는 달리 알고리즘을 사용해서 복호화(Decoding)이 가능하다!

왜 굳이 암호화 방식을 설명했냐면 해시 함수가 바로 단방향 암호화 방식이기 때문이다.

🤔 그럼 해시를 이용하면 비밀번호 보안은 보장할 수 있겠네?

그건 또 아니다. 위에서 언급한 SHA 의 경우 미국의 NIST(미국 국립표준기술연구소)에서 제정한 암호화 해시 함수로 Secure Hash Algorithm, 즉 안전한 해시 알고리즘이라는 뜻인데... 굉장히 활발하게 쓰였으나 안전하지 않은 것이 판명되어서 새로운 버전인 SHA-1이 나왔을 즈음에는 연구소에서 사용을 중지시킨 역사가 있다.
그러면 왜 안전하지 않다고 판명되었나? 왜냐면 최근엔 컴퓨터 성능이 너무 좋아져서 비밀번호의 길이가 짧은 경우 이 다이제스트를 추측하고 암호화된 비밀번호를 해독하기 위해 다이제스트를 하나하나 대입하는 무식한 방법이 일반 컴퓨터로도 그다지 짧지 않은 시간이 걸리기 때문이었다고 한다.
또한 이 암호화 알고리즘의 대부분이 공개되어있기 때문에 위의 방법처럼 맘먹고 시도를 하면 비밀번호 탈취가 충분히 가능하다. (그렇다고 함부로 시도했다가는 형사처벌 될 수 있으니 주의)

😨그런데도 해시 함수 방식을 계속 쓰는 거야?

해시 함수의 취약점을 보완하기 위한 방법이 두 가지가 있다. 하나는 솔트(Salt), 나머지 하나는 키 스트레칭(Key Stretcing) 이다.

  • 솔트(salt)는 말 그대로 소금... 에서 온 말인데, 해시 함수로 암호화된 다이제스트에 추가되는 임의의 문자열을 말한다. 다이제스트에 소금을 쳐서 맛을 변하게 하는, 추가적으로 암호화를 하는 기법이다.
    이건 국비 교육할 때 배웠는데... 솔트를 사용해서 암호화를 할 경우 이 솔트 값도 서버 어딘가에 저장되는 것으로 알고 있다. 그래서 솔트가 유출된다면 또 안전하지 않을 수도 있다... 는 것이 기억 난다... 기억만 난다... 아닐 수도 있음...
  • 키 스트레칭(Key Stretcing) 은 해시 알고리즘을 여러번 반복해서 다이제스트를 복잡하게 재 암호화 한다. 주로 bcrypt 알고리즘이 쓰인다고 하는데 잘 모른다... 강력한 해시 알고리즘이라고 한다...
profile
잘하는 건 아닌데 포기하진 않을거야

0개의 댓글