암호화
암호화(Encryption)란?
- 암호화 알고리즘을 이용해 평문의 데이터를 암호문으로 변환하는 것.
- 반대로 암호문을 평문으로 변환하는 과정을 복호화(해독, Decryption)라고 한다.
암호화가 필요한 이유
- DB에 고객의 데이터를 평문의 데이터로 저장하면 DB의 데이터가 해커로부터 도용 당했을 때 고객의 데이터가 유출되어 악용될 수 있다. 하지만 암호화된 암호문으로 저장하면 도용당하더라도 해커들이 악용할 수 없다.
- 정보통신망법과 개인정보보호법은 고객의 개인정보를 암호화활 것을 요구한다.
- 네트워크를 통해 프로세스 간에 데이터를 주고 받을 때, 데이터는 전송 과정에서 스니핑(Sniffing) 되어 악용될 수 있다. 하지만 암호문으로 주고 받는다면 스니핑되더라도 악용될 수가 없다.
암호화 키
- 고전 암호 체계에서는 암호화 알고리즘을 알면 해독이 가능해진다는 문제점이 있었다.
- 이를 극복하기 위해서 암호화 키가 사용되기 시작.
- 암호화 알고리즘을 알더라고 키가 없으면 해독이 불가능.
암호화 알고리즘
단방향 알고리즘
- 평문에서 암호문으로의 암호화는 가능하지만 암호문에서 평문으로의 복호화는 불가능.
- 대표적으로 해싱기법(데이터를 고정된 길이의 암호문으로 변환)이 있다.
- ex
양방향 알고리즘
대칭키 방식
- 하나의 키를 이용하여 암호화, 복호화를 할 수 있는 알고리즘
- 키가 노출되면 암호가 해독될 수 있으므로 키를 비공개한다.
- 문제점
- 송신 측에서 수신 측에 키를 전송할 때, 키가 제 3자에게 노출될 우려가 있다.
- ex
비대칭키 방식
- 공개키(Public Key), 비공개키(Private Key)가 별도로 존재.
- 하나의 키를 사용해 암호화를 하고, 다른 하나의 키를 사용해 복호화를 한다.
- 문제점
- 대칭키 방식에 비해 느리다.
- 대칭키를 비대칭키 방식으로 전달하고, 실제 암호화와 복호화는 대칭키를 이용하는 방식이 일반적이다.
- ex
SHA-256
- SHA(Secure Hash Algorithm) 알고리즘의 한 종류이다.
- 256비트로 구성된 64자리 문자열(0 ~ f로 이루어진 문자열) 다이제스트를 반환한다.
특징
- 단방향 암호화 방식
- 안정적
- 256 비트 사이즈의 문자열을 반환한다는 것은 만들 수 있는 문자열의 경우의 수가 2256이라는 뜻이다. 따라서 브루트 포스 공격에 안전하다고 볼 수 있다.
- 데이터의 무결성을 검증하거나 패스워드 암호화에 많이 사용된다.
한계
- 레인보우 테이블(여러 해시 함수에 대해 입력값을 대입했을 때 얻을 수 있는 다이제스트들을 대량으로 모아둔 표)를 사용해 원문을 알아낼 수 있다.
- 만약 다이제스트 값이 레인보우 테이블에 존재한다면 원문을 쉽게 알아낼 수 있다.
해결방법
- 원문에 솔트를(임의의 문자열)를 덧붙인 다음 알고리즘을 적용하여 다이제스트를 얻는다.
- 입력값이 길고 복잡할수록 레인보우 테이블에 존재할 확률은 낮아진다.
- 원문마다 서로 다른 솔트를 가진다면 다이제스트 값으로 원문을 찾는 것은 더욱 힘들어진다.