용어 정리
-
암호화?
평문(Plain Text)를 해독 불가능한 형태의 메세지로 변환하는 것.
-
복호화?
암호화된 문장을 평문으로 변환하는 것
-
양방향 암호화
암호화와 복호화 과정을 통해 송, 수신간 주고받는 메세지를 안전하게 암호화, 복호화 하는 과정
-
단방향 암호화
해싱을 이용한 암호화 방식. 복호화 불가능
양방향 암호화(대칭, 비대칭키)
대칭키
같은 키를 이용하여 메세지를 암호화, 복호화 하는 것
비대칭키
암호화, 복호화 하는 키가 같지 않고 다름
- 암호화 알고리즘에 따라 사용방식이 다르다.
- 전자서명을 위한 알고리즘에서는 Private Key 메세지로 서명하고 Public Key로 검증한다.
JWT
- Header, Payload, Signature를 이용한 토큰 기법
- 위변조 방지를 위해 개인키를 통해 Signature(전자서명)을 만드는데, 이때 비대칭키를 이용한다.
- 유저가 로그인에 성공하게 되면 access_token 값을 받게된다.
- 이 값을 서버에 보내게 되면 복호화를 거쳐 해당 유저 정보가 DB에 있는지 확인하게 됨
- JSON 데이터를 암호화하여 클라이언트-서버 간 주고받는 것을 JWT라고 한다.
단방향 암호화(해싱)
- hash를 이용하여 암호화하는 과정
- 복호화 불가능
- 원래 내용은 모르지만 데이터의 진위 여부는 확인 가능
- Bcrypt
Bcrypt
- 단방향 해시함수에는 취약점이 존재함
- Rainbow table attack : 해시 값들을 미리 계산해놓은 테이블을 통해 brute force 공격
- 따라서 단방향 암호화에도 두가지 보안점이 필요해졌음
-
Salting : 실제 데이터 이외에 랜덤 데이터를 추가하여 해시값을 계산
(Key straching : 단방향 해시값을 계산한 후 그 해시값을 여러번 해시함)
-
Bcrypt : Salting, Key Straching을 구현한 해시함수