일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Redis
- 캠프
- spring
- 낙관적락 비관적락 차이
- bean
- spring security
- JPA 동시성
- 서버
- annotation
- spring security 인증
- 개발
- flask
- 서버개발캠프
- JPA
- JPA 비관적락
- 암호화
- component
- Pessimistic Lock
- Optimistic Lock
- JPA Lock
- 스프링
- 안드로이드
- Android
- 스프링 로그
- 스마일게이트
- Transaction isolation level
- 디자인 패턴
- JPA 낙관적락
- Inno DB
- 스프링 log
- Today
- Total
모르는게 많은 개발자
[단방향 암호화]해시 함수 / Salt 본문
오늘은 단방향 암호화에 대해 알아보자.
단방향 암호화란?
메세지를 암호화할 순 있지만 암호화된 메세지를 복호화가 불가능한 암호화 기법
1. 해시(Hash) 함수
- 임의 데이터를 고정된 길이의 데이터(해시값)로 바꿔주는 함수
- 같은 데이터에 대해 항상 같은 해시값이 출력
- 입력값이 비슷해도 전혀 다른 결과값이 나옴
- SHA-1, SHA-3 SHA-256, SHA-512, MD5등이 있음
해시 충돌 : 서로 다른 데이터가 해시 함수를 통해 같은 해시값으로 출력되는 현상
MD5에서 해시 충돌 현상이 발생, 보편적으로 SHA-256, SHA-512를 많이 사용
단방향 암호화는 보통 비밀번호에서 많이 사용된다.
해시 함수로 암호화된 비밀번호를 DB에 저장하고, 로그인시 비밀번호를 해시 함수로 암호화해 DB의 비밀번호와 비교하여 로그인여부를 따지는 방법을 사용한다.
이렇게 했을 때 해커가 DB 데이터를 해킹한다해도 유저들의 비밀번호를 복호화 할 수 없다.
하지만 해시만 적용한 패스워드라면 만약 데이터를 해킹당했을 때 해커들이 임의의 패스워드를 만들어 해시를 적용하여 DB데이터와 대조하면 그 해시의 원본 값이 무엇인지 알아낼 위험이 있다.
그래서 보통 상용화된 사이트에서는 해시 함수만으로 암호화된 비밀번호를 DB에 저장하지 않고 Salt라는 방법을 이용한다.
2. Salt
위에서 해시 함수로만 암호화된 비밀번호는 해킹에 노출될 수 있다 말했다. 이것을 막기 위한것이 Salt이다.
소금이라는 무작위 문자열을 랜덤으로 생성해 비밀번호에 하드코딩을 통해 붙여넣어 해시함수를 적용하면 예측할 수 없는 비밀번호가 생겨난다.
Salt 방법을 사용할 때 Salt길이는 해시 값 길이 만큼 적용하고(SHA-256일 경우 256비트 길이만큼 Salt생성), 무작위로 소금값을 생성해야한다.
참고
https://ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%EC%B6%A9%EB%8F%8C
'알아가는 개발' 카테고리의 다른 글
Base64 인코딩 개념/과정 (0) | 2020.06.13 |
---|---|
REST란 무엇일까? (0) | 2020.05.14 |
TCP/UDP 특징 총정리 (0) | 2020.05.05 |
[양방향 암호화] 대칭키 암호화 (0) | 2020.04.22 |
[양방향 암호화] 비대칭 키/RSA 알고리즘 설명 (0) | 2020.04.17 |