사용자 패스워드를 전송하고 보관하는 방법

김명주·2023년 4월 25일
0

선 요약

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

암호화?

암호화란, 어떠한 데이터를 암호화시켜 다른 이들이 직접 그 의미를 알지 못하도록 하는 작업을 말한다.

복호화?

복호화란, 암호화 되어있는 데이터를 해독하는 작업
해싱과 암호화는 암호학적으로 본다면 차이가 있다. 가장 큰 차이는 ‘방향성’ 이다.

단방향

복호화가 불가능하다는 것이고 이를 ‘해싱’ 이라고 부른다.

양방향

‘해싱’과는 다른 ‘암호화(Encryption)’ 이며 역으로 복호화도 가능하다.

단방향 해시 함수

어떤 수학적 연산 또는 알고리즘에 의해 원본 데이터를 매핑시켜 완전히 다른 암호화된 데이터로 변환시키는 것이다. 이를 다이제스트라고 부른다. 단방향으로 원본 데이터를 구할 수 없다. 대표적인 해시 함수는 SHA, MD, HAS, WHIRLPOOL이 있다.

다이제스트

해시에 의해 암호화된 데이터를 말한다.

단방향 해시 함수의 단점

  1. 동일한 메세지는 동일한 다이제스트를 갖는다. 해커들은 여러 값들을 대입해보면서 얻었던 다이제스트들을 모아놓은 리스트에서 메세지의 원문을 찾는다. 이러한 다이제스트들의 테이블을 레인보우 테이블이라고 한다.

  2. 무차별 대입 공격 - 브루트 포스

  • 해시 함수는 원래 빠른 데이터 검색을 위한 목적으로 설계되었기 때문에 원문과 다이제스트는 금방 얻을 수 있다. 해커들은 ‘상징성’있는 문자를 추려서 조합하여 해킹을 시도한다.

단방향 해시 함수의 보완

  1. 해시 함수 여러 번 수행(Key Stetching)
  • 다이제스트를 여러 번 해시로 암호화시키는 작업이다. 브루트포스를 무력화 시킬 수 있다.
  1. 솔트(Salt)
  • 해시함수를 돌리기 전 원문에 임의의 문자열을 덧붙이는 것이다. 한 명의 패스워드가 유출되더라도 다른 사용자는 안전할 수 있다.
  • 솔팅할 문자열이 간단하거나, 짧으면 큰 의미는 없어진다. 각 사용자별 고유의 솔트를 갖고있어야 하며, 암호학적으로 안전한 난수 생성기를 사용하여 예측가능성을 줄여야한다.
profile
개발자를 향해 달리는 사람

0개의 댓글