우리가 일반적으로 생각하는 대표적인 암호화의 대상은 크리덴셜(Credential)의 한 종류인 패스워드입니다. 패스워드는 암호화의 대상인 메시지를 조금 더 구체적으로 표현한 것이라고 볼 수 있을테구요.
이번 시간에는 암호화에 대한 아주 쉬운 이야기를 짧게 해보려고 합니다.
암호화란 무엇인지 암호화 유형에는 기본적으로 어떤것이 있는지 등을 아주 쉽게 이해할 수 있도록 짧게 정리해 보겠습니다.
암호화란?
- 사용자의 민감한 정보를 보호하기 위한 기술
- Crypto 또는 Cipher라는 비슷한 용어가 있음
- Ciphertext: 암호화 된 텍스트
- Cryptography
- 암호학적 관점에서의 암호화 전체를 아우르는 말
- Crypto Currency
- 암호 화폐
- Encryption / Decryption
- 암호학 관점에서의 데이터 변환 과정
- Encryption
- 암호화
- Decryption
- 복호화
- Encoding / Decoding
- 암호학 관점은 아님
- 데이터의 형식이나 패턴을 목적에 맞게 변환하는 과정
- 예)
- Encoding
- encode(원본 데이터) → Base64 형식의 문자열로 인코딩
- Decoding
- decode(Base64 형식으로 인코딩된 문자열) → 원본 데이터
- decode(Base64 형식으로 인코딩된 문자열) → 원본 데이터
- Encoding
암호화 대상의 기준
웹 애플리케이션의 아이디/패스워드 로그인을 생각해보면 암호화의 대상 기준은 무엇이 되어야하는가를 잘 알 수 있습니다.
패스워드는 민감한(Sensitive) 정보이므로 타인에게 평문(Plain Text) 형태로 유출이 되면 안될테니까요.
따라서 애플리케이션 구현시 외부에 유출되면 문제가 발생할 수 있는 정보들은 암호화의 대상이 될 수 있으며, 아래에서 나열한 항목들은 암호화를 진지하게 고려해 보아야 하는 대상이라고 볼 수 있습니다.
- 로그인 인증을 위한 패스워드
- 구글, AWS 등의 외부 서비스를 이용하기 위한 계정 정보 또는 Secret 정보
- JWT를 생성하고 검증하는데 필요한 Secret 정보
- 데이터베이스 접속 정보
- 데이터베이스 접속 정보에서 root 계정을 사용하는 분들이 많은데 root 계정이 아닌 별도의 사용자 계정을 만들어서 사용하길 권장합니다.
- root는 말 그대로 최고 권한을 가진 계정이기 때문에 직접적으로 사용하지 않는 것이 좋습니다.
암/복호화 가능 여부에 따른 암호화 방식
- 양방향 암호화
- 암호화도 되고 복호화도 되는 암호화 방식
- 암호화 된 메시지를 상대방이 볼 수 있어야 하는 암호화 방식이며, 복호화가 되어야 정상적인 메시지를 확인할 수 있습니다.
- 단방향 암호화
- 암호화는 되지만 복호화는 되지 않는 암호화 방식
- 암호화된 메시지를 굳이 복호화 해서 확인할 필요가 없을 때 사용할 수 있는 암호화 방식입니다.
- 단방향 암호화를 적용하는 대표적인 항목이 로그인 패스워드입니다. 로그인 패스워드의 경우 사용자가 입력한 패스워드를 암호화 한 데이터와 이미 암호화 되어 저장되어 있는 데이터가 일치한지 여부만 판단하면 되기 때문에 복호화가 필요없습니다.
- 단방향 암호화는 일반적으로 해시 알고리즘을 사용하는데 엄밀하게 말하자면 해시 알고리즘 자체가 암호화라고 보기는 어렵지만 어쨌든 원본 메시지를 보호할 수 있다는 관점에서의 암호화라고 생각하면 좋을 것 같습니다.
키 유형에 따른 암호화 방식
- 대칭키 암호화 방식
- 하나의 키를 서로 공유해서 해당 키로 암호화/복호화를 수행
- 대칭키 암호화 방식은 하나의 키를 서로 공유해야 하기 때문에 공유된 키가 유출되면 심각한 문제가 발생할 수 있습니다.
- 비대칭키 암호화 방식
- 암호화를 수행하는 키와 복호화를 수행하는 키가 다릅니다.
- Public Key와 Private Key
- ⭐ Public Key로 암호화 하는 것은 민감한 데이터 또는 메시지 보호를 위해서.
- ⭐ Private Key로 암호화 하는 것은 디지털 서명(Digital Signature)을 위해서.
- 블록체인에서 이 방식을 사용합니다.
'Java Backend 개발자 되기 > Spring Security' 카테고리의 다른 글
JWT를 이용한 인증(Authentication) 및 자격 검증(Authorization) 프로세스 (4) | 2023.01.19 |
---|---|
JWT 자격 검증 시, SecurityContext는 언제 비워(clear)질까? (8) | 2023.01.19 |
Spring Security에서의 권한 부여 (Authorization) 처리 흐름 (0) | 2023.01.17 |
Spring Security에서의 인증(Authentication) 처리 흐름 (0) | 2023.01.17 |
HTTPS의 동작 원리와 CA의 역할을 그림으로.. (2) | 2023.01.13 |