메세지 내용이 불명확하도록 평문(plain text)을 재구성하여 암호화된 문장(Cipher text)으로 만드는 과정이다.
https://www.digicert.com/faq/cryptography/what-is-ssl-cryptography
암호화된 암호문은 복화화할 수 있는 알고리즘이다.
비대칭키는 공개키(Public Key)와 개인키(Private Key)가 하나의 쌍을 이루고 있다. 다른 사람들에게 공개된 키로서 정보를 암호화할 수 있는 공개키와 사용자 본인만 알고 있어서 암호를 풀 수 있는 키인 개인키는 하나의 쌍을 이루고 있다.
비대칭키를 사용한 암호화 방식에는 공개키로 암호화를 하는 경우와 개인키로 암호화를 하는 경우로 구분할 수 있다. 공개키로 암호화를 선택했다면 데이터 보안에 중점을 둔 것이고, 개인키로 암호화를 진행했다면 안전한 전자서명을 통한 인증 과정에 중점을 둔 것으로 해석할 수 있다.
출처 : http://wiki.hash.kr/index.php/%EB%B9%84%EB%8C%80%EC%B9%AD%ED%82%A4
제7조(개인정보의 암호화)
② 개인정보처리자는 비밀번호 및 바이오정보는 암호화하여 저장하여야 한다. 다만, 비밀번호를 저장하는 경우에는 복호화되지 아니하도록 일방향 암호화하여 저장하여야 한다.
→ 유저가 입력한 패스워드 평문으로 해싱하여 해쉬값을 비교하므로 단방향 암호화된 암호문이 노출되어도 평문을 알지 못하면 절대 로그인 할 수 없다.
Brute force attack
모든 패스워드 경우의 수를 대입하는 것이다.
New 25 GPU Monster Devours Passwords In Seconds에 따르면 md5의 경우 25개의 GPU로 초당 1800억개의 대입이 가능하다. 단순히 영문 대소문자, 숫자만 조합한 8자리 고정 패스워드라면 62^8개의 조합이 가능한데, 이 정도면 62^8 / 1800억 = 1213초, 불과 20분이면 다 크랙되는 것이다.
출처 : http://www.codeok.net/패스워드 보안의 기술>
Rainbow table
미리 가능한 패스워드 조합을 해싱한 결과 테이블을 가지고 비교하여 평문을 알아내는 방법이다.
MD5 는 이미 rainbow table 이 존재한다고 한다.
Rainbow table → 인식 가능성 : Salting
Salt 란 원문 그대로 해싱 함수 입력값으로 사용하지 않고 바이트 단위의 임의의 문자열을 추가하는데 이때 사용되는 임의의 문자열이다.
Salting 이란 원문에 Salt 를 추가하여 다이제스트를 생성하는 것이다. Salting 을 사용하면 패스워드 원본이 노출되도 Salt 값을 알지 못해 DB 에 저장된 다이제스트를 생성하기 어렵다
Brute force attack → 속도 : Key Stretching
모든 패스워드 경우의 수를 대입하려면 최대한 빠르게 많이 돌려야한다.
최대한 빠르게를 못하게 하기 위해 다이제스트 생성 시간을 오래 걸리도록 하는 방법이다.
최근에는 일반적인 장비로 1초에 50억 개 이상의 다이제스트를 비교할 수 있지만, 키 스트레칭을 적용하여 동일한 장비에서 1초에 5번 정도만 비교할 수 있게 한다.
출처 : https://d2.naver.com/helloworld/318732 >
이를 해결하기 위해서는 key derivation function을 사용하는 것을 권장한다.
Adaptive Key Derivation Functions ?
adaptive key derivation function은 다이제스트를 생성할 때 솔팅과 키 스트레칭을 반복하며 솔트와 패스워드 외에도 입력 값을 추가하여 공격자가 쉽게 다이제스트를 유추할 수 없도록 하고 보안의 강도를 선택할 수 있다.
종류
왜 Password hashing시 Bcrypt 가 추천되어질까?
PBKDF2 비밀번호 암호화 구성의 알려진 문제점과 고려사항
What is a key derivation function (KDF) and how do they work?
너무 좋은 글이네요. 공유해주셔서 감사합니다.