HTTPS
HTTPS : HTTP + Secure HTTP 프로토콜 내용을 암호화
특징
인증서(Certificate)
데이터 제공자 신원 보장
도메인 종속
CA
Certificate Authority
공인 인증서 발급 기관
비대칭 키 암호화
전혀다른 두개의 키로 암호화와 복호화가 가능(a로 암호화를 했다면 b로 복호화해야함 a로 암호화 a로 복호화 불가능)
키 하나는 공개하고 하나는 비공해하여 데이터를 안전하게 전송할 수 있게 함
HTTP 순서
- Hand Shake
- 클라이언트가 서버로 아이디와 비밀번호를 입력
- 서버가 클라이언트를 확인하고 공개키와 인증서 정보를 전달
- 비밀 키 생성
- 키 제작용 랜덤 스트링을 상호 교환
- 클라이언트와 서버 각각 세션키를 생성
- 상호 키 검증
- 클라이언트가 세션 키로 암호화 된 메시지를 전달
- 서버는 다른 키를 이용하여 메시지를 복호화 한 후 그에 대한 정보를 세션 키로 암호화 시키고 메시지 전달
HTTPS 연결 성립
Hashing
암호화는 일련의 정보를 임의의 방식을 사용하여 형태를 변환
정보를 소유한 사람 외에는 이해할 수 없도록 알고리즘을 이용해 정보를 관리하는 과정
어떠한 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것
- 모든 값에 대해 해시 값을 계산하는데 시간이 오래걸리지 않아야함
- 최대한 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가짐
- 아주 작은 단위를 변경해도 완전히 다른 해시 값을 가져야함
암호화해야 하는 값에 별도의 값을 추가하여 결과를 변형한 것
- 암호화만 해놓으면 해시된 결과가 동일 -> 해시된 값과 원래 값을 테이블로 만ㄷ르어서 decoding 해버리는 경우도 있음
- 원본값에 임의로 약속된 '별도의 문자열'을 추가해서 해시를 진행하면 기존 해시값과 전형 다른 해시값이 반환되어 알고리즘이 노출되어도 원본값 보호 가능
- 기존: 암호화하려는 값 => hash 값
salt 사용 암화화하려는 값 + salt용 값 => hash값
솔트 사용 시 주의점
- salt는 유저와 패스워드 별로 유일한 값을 가져야함
- 사용자 계정을 생성할 때와 비밀번호를 변경할 때 마다 새로운 임의의 salt 사용하여 해싱
- salt 재사용 금지
- salt 는 db의 유저 테이블에 같이 저장되어야 함
그동안 해싱을 사용은 해왔지만 어떻게 사용하지는 전혀 몰랐다. 재밌는 것 같다.
HTTPS 와 쿠키는 내일 작성할 예정