무결성 Integrity : 메시지가 목적지로 가는 도중 제3자에 의해 조작되지 않고 원본 그대로 도착함
대칭키와 비대칭키
대칭키 : 암호화키와 복호화키가 동일하다
비대칭키 : 암호화키와 복호화키가 서로 다르다. 한쪽을 공개키로, 다른한쪽을 비공개키(개인키)로 한다. 어느쪽으로 암호화/복호화할지는 어디에 중점을 두느냐에 따라 달라지게 된다. 데이터보안에 중점을 둔다면 공개키로 암호화를, 인증과정에 중점을 둔다면 비공개키로 암호화를 할 수 있다.
인증서
인증서는 브라우저에서 접속한 서버가 의도한 서버임을 보장한다.
- 브라우저는 주요 CA의 리스트와 공개키를 이미 보유하있는 상태에서 서버의 인증서 요청을 검증한다. 리스트에 없는 CA의 경우 외부 인터넷에서 CA 정보와 공개키를 확보한다.
인증서는 브라우저와 서버가 통신할 때 암호화할 수 있도록 서버의 공개키를 제공한다.
브라우저 주소창 왼쪽 자물쇠 모양을 클릭하면 인증서를 확인할 수 있다.
인증서는 CA(Certificate Authority)에서 발급받는다.
CA로는 DigiCert 등이 유명하며 Let's Encrypt는 비영리기관으로 무료로 인증서를 발급받을 수 있다.
Hashing & Salt
Hashing
입력받은 문자열(길이는 가변적)을 알아볼 수 없도록 고정된 길이의 다른 문자열로 변환하는 것
해시함수는 인풋과 아웃풋이 항상 동일한 순수함수다.
- 1234, 0000 같은 자주사용 되는 비밀번호를 사용하면 안되는 이유 : 이와 매칭되는 해싱된 값을 저장한 레인보우테이블이 존재하기 때문에 해킹이 쉽다
그 외의 경우 해싱된 값으로 복호화하는 것은 사실상 불가능하다. (해싱함수는 단방향으로 역변환이 불가)
해시함수의 연산은 오래걸리지 않아야 한다.
해싱함수는 최대한 모든 값이 서로 다른 해시 값을 가지도록 해야 한다.
더 안전하게 하려면 해싱을 여러번 할 수도 있다.
널리 알려진 해시함수 : SHA-1, SHA-256, SHA-512 (최소 SHA-256 이상을 쓸 것을 권장)
Salt
결과를 변형하기 위해 암호화할 원본 문자열에 추가하는 별도의 문자열
- input : 1234 (원본) -> hashing -> output : 7110eda...