들어가며
무심코 사용하고 대강 이해하고 있던 인코딩, 해싱, 암호화에 대한 개념을 포스트를 통해 좀 더 정확히 이해하고자 합니다.
Encoding(인코딩)
- Data Encoding은 Scheme를 이용하여 데이터를 새로운 포맷으로 변경하는 것(Base64, ASCII Code 등)
- 현재의 포맷으로는 데이터 전송이 불가능할 경우 사용함
- 원래의 데이터로 복원하는 것(Decoding)이 쉽기 때문에 암호화 목적으로 사용하지 않음.
- 서로 다른 시스템간 동일한 포맷으로 데이터를 주고받기 위해 사용함
Hashing(해싱)
- Hashing은 입력값을 고정된 길이의 출력값으로 변경하는 것
- 해싱된 데이터는 원래의 데이터로 복원 불가(단방향 암호화)
- 보통 데이터 무결성 체크를 위해 사용
- 원본과 사본을 동일한 해시 알고리즘(ex. SHA256) 으로 해싱했을 때 값이 같으면, 원본과 사본이 같다는 것이 증명됨
Encryption(암호화)
- Encryption은 Key 또는 Password를 가지고 있는 경우에만 원본을 볼 수 있도록 데이터를 '안전하게' 인코딩한 것 (양방향 암호화)
- Encryption은 Symmetric Key(대칭키), Public Key(공개키) 방식이 있음
- Symmetric Key(대칭키) 방식
- 암호화, 복호화 키가 동일
- 암호화 속도가 빨라 대용량 데이터 암호화에 적합
- Publick Key(공개키) 방식
- 암호화, 복호화 키가 다름
- 암호화 속도가 느리지만, 대칭키보다는 확장성이 좋음(본인의 개인키만 관리하면 되니까.대칭키방식은 키를 공유핼 사람이 많아지만 키관리가 어려워짐)
- 송신자 개인키로 암호화하고, 송신자 공개키로 복호화 : 부인 방지 목적(송신자만 개인키 갖고 있으니 그사람이 보낸 것이 확실)
- 수신자 공개키로 암호화하고, 수신자 개인키로 복호화 : 기밀성 목적. 암호화 느려서 대칭키 암호화하여 전송할 경우에 사용함.