해시함수(Hash Funtion)

pitbull terrier·2020년 8월 12일
0

개인공부

목록 보기
5/8

해시함수는 다른 말로 체크섬이라고 불린다.
해시함수는 메시지 인증과 무결성 체크를 위해 존재하며 종류는 MD5,SHA가 있다.

해시함수의 특징은 입력 값의 길이에 상관 없이 고정된 길이의 해시값이 출력된다.
입력 값의 일부만 변경되더라도 전혀 다른 해시값이 출력된다.

해시함수는 단방향이므로 복호화를 할 수 없다.
즉, 암호화는 가능하지만 복호화는 불가능하기 때문에 원본을 알 수 없다.
그렇기 때문에 패스워드는 반드시 단방향 함수를 이용해야 한다.

해시함수의 문제점

1.인식 가능성
메시지가 같으면 해시값도 같으므로 다른 사용자랑 패스워드가 같으면 해시값도 같아서 한꺼번에 털릴 수 있다.
레인보우 공격을 당할 수 있다.
이는 레인보우 테이블에 미리 해시해둔 패스워드를 잔뜩 가지고 있다가 훔쳐낸 패스워드와 비교하는 것이다.

2.속도
해시 함수의 처리 속도가 빠르기 때문에 무차별 대입 공격을 당할 수 있다.

해시함수의 문제점 해결

1.솔팅
솔팅의 가장 큰 목적은 salt를 이용해서 레인보우 테이블을 무의미하게 만드는 것이다.
솔팅은 패스워드에다가 임의의 문자열인 salt를 추가하여 해시값을 생성한다.
salt는 최소 128bit 정도는 되어야 안전하다.
사용자마다 각자 다른 salt를 사용한다면 패스워드가 같더라도 해시값이 다르게 생성된다.

2.키 스트레칭
말 그대로 스트레칭, 쭉 늘린다는 뜻이다. 해시를 여러 번 반복하여 충분히 시간을 늘린다.
어떻게 시간을 늘리냐면 패스워드의 해시값을 생성하고 생성된 해시값을 입력 값으로 하여 해시값을 생성하고 ...이를 반복해서 해시값을 생성하는 식으로 늘린다.
보통 유저가 작성한 패스워드가 짧거나 예측하기 쉬운 경우가 많은데 키 스트레칭은 이를 더 어렵게 만들어 준다.

추천

솔팅과 키 스트레칭으로 구성된 암호화 시스템을 구현하려면 이미 검증된 암호화 시스템을 사용하는 것이 좋다.

  • PBKDF2 : 가장 많이 사용되며 Django에서 기본으로 사용 중이다. ISO-2 7001의 보안 규정을 준수하고 있다.

  • bcrypt : 애초부터 패스워드 저장을 목적으로 설계되어 매우 강력한 패스워드 해시값을 생성하는 시스템을 쉽게 구현할 수 있다. 관련된 라이브러리도 언어별로 쉽게 찾을 수 있다.

  • scrypt : 위 두 개보다 진보된 시스템이다. 만약 구현하려는 시스템이 매우 민감한 정보를 다루고 보안 시스템을 구현하는 데 많은 비용을 투자할 수 있다면 사용한다.

profile
yoonbitnara.github.io

0개의 댓글