http://victorydntmd.tistory.com/144
mysql의 password() 함수 암호화 방식
mysql에서 비밀번호와 같은 데이터들을 암호화 해주는 함수를 제공합니다.
그래서 우리는 사용자로부터 입력 받은 데이터들을 password() 함수의 인자로 전달하기만 하면 우리도 모르는 암호화된 값이 데이터베이스에 저장하게 되죠.
password() 함수는 SHA-1 알고리즘을 두 번 거쳐서 앞에 *를 붙이는 방식으로 계산됩니다.
SHA-1이란?
SHA-1은 단방향 암호화 함수로서 RFC-3174로 묘사된 문자에 대한 160 비트 checksum을 계산하여 40 헥사 자리 바이너리 문자열을 반환하는 것을 말합니다.
이해하기 싫게 만드는 정의입니다...
간단하게 말하면 해싱 알고리즘으로써 어떤 문자열 값을 일정 길이의 문자열로 변환하는 것을 말합니다.
SHA-1는 해싱된 결과 값의 길이가 짧기 때문에 무작위 공격으로 인해 쉽게 뚫릴 수 있다는 단점이 있습니다.
그래서 SHA-1보다 SHA-256 , SHA-512 등을 사용하도록 권고되고 있습니다.
( CPU 연산력이 강해질수록 길이를 늘리는 방법으로 대응해오고 있습니다. )
SHA-2는 SHA-1보다 길이가 길기 때문에 암호화 되기 전인 원래 데이터를 찾는데 시간이 더 오래 걸리기 때문에 보안이 좋다고 한다고 한다.
아래 사진은 SHA1과 SHA256을 비교하는 글로써, 해싱된 결과 값이 다르다는 것을 보여줍니다. ( 원본 링크 )
그런데 SHA는 암호화가 아닌 사실 해시 알고리즘이기 때문에 보안상 완벽하지는 않습니다.
Rainbow table ( 해시 함수를 사용하여 변환 가능한 모든 해시 값을 저장시켜 놓은 표이다 )을 사용하면 짧은 시간으로 원래 값을 뽑아낼 수 있기 때문이죠.
그래서 SHA 방식만 사용하여 암호화를 하는 것보다 salt를 추가하는 방식이 주로 사용되고 있습니다.
salt란 SHA 알고리즘 방식에 어떤 데이터( 문자열이든 숫자든 원하는 데이터 )를 추가하는 양념을 뿌리는 것을 말합니다.
Rainbow table로 확인할 수 없도록 보안성을 높이는 방식이죠.
암호화 종류
1) 단방향 암호화
- 해싱을 이용하는 암호화 기법
- 암호화를 한 후 복호화를 할 필요가 없는 경우에 사용됨
- 비밀번호, 주민번호를 인코딩 할 때 사용됨
ex) MD5, SHA 등..
=> MD5는 매우 취약하며, 최소한 SHA-256 이상 사용을 권장
2) 대칭형 암호화 ( 비밀키 암호화 )
- 암호화와 복호화에 같은 키를 사용하여 암호화 하는 방식 ( 대칭키 )
- 암호화를 해봤자 키가 노출되면 그냥 털리게 됨
ex) DES , DES3 , AES 등…
3) 비대칭형 암호화 ( 공개키 암호화 )
- 암호화 키와 복호화 키가 다른 것
송신자는 수신자의 공개키를 받아 메시지를 암호화 하고,
수신자는 자신만이 갖고 있는 개인키를 이용하여 복호화 함.
즉 메시지는 누구나 암호화가 가능하지만 복호화는 비밀키를 갖는 개인만이 가능
- 대칭형 암호화에서 발생하는 키 분배의 문제를 해결하기 위한 암호화 기법
- 매우 큰 수의 소인수 분해가 어렵다는 것에 기반을 둠
2048bit 크기의 수에 대하여 두 소인수를 구하려면 10년은 걸린다고 함
ex) RSA
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 24 | apt-get upgrade 수행 시 특정 패키지만 빼고 설치하기 | proin | 2018.10.04 | 0 |
| 23 | apt-get upgrade 수행 시 특정 패키지만 설치하기 | proin | 2018.10.04 | 1 |
| 22 | 필요없을지도 모르지만 왠지 겁나니까 | proin | 2018.10.02 | 2 |
| 21 | Info - XE 백업 및 복원 (통째로 서버 옮기기) | proin | 2018.10.02 | 1 |
| 20 | 워드프레스와 백업(backup) | proin | 2018.10.02 | 0 |
| 19 | iptables 정리 | proin | 2018.10.02 | 3 |
| 18 | 변경된 iptables 저장 방법 | proin | 2018.10.02 | 0 |
| 17 | 내 서버에는 누가 들어오는걸까? (실시간 user-agent 분석기) | proin | 2018.10.02 | 1 |
| 16 | BIND DNS Server | proin | 2018.10.02 | 0 |
| 15 | Setting up a BIND DNS Server | proin | 2018.10.02 | 1 |
| 14 | How To Configure BIND as a Private Network DNS Server on Ubuntu 18.04 | proin | 2018.10.02 | 0 |
| 13 | 뭔가 쓸만 할수도 있는 사이트 | proin | 2018.10.01 | 1 |
| 12 | OpenVPN Access Server 구축하기 | proin | 2018.10.01 | 6 |
| 11 | ZmEu 해킹시도 접근 | proin | 2018.10.01 | 0 |
| 10 | [Linux] 압축 파일 관리 - gz 압축하기, 압축풀기 | proin | 2018.10.01 | 1 |
| 9 | [devil's camp] - 트위터 봇 만들기 (권준혁) | proin | 2018.09.27 | 0 |
| 8 | 아파치 가상호스트 | proin | 2018.09.26 | 1 |
| 7 | [SPRING] 스프링 시큐리티 (비밀번호 암호화) | proin | 2018.09.19 | 3 |
| » | [MySQL] MySQL의 password() 함수와 암호화 | proin | 2018.09.19 | 2 |
| 5 | 안전한 패스워드 저장 | proin | 2018.09.19 | 1 |