[정보보안] 3. Encoding vs Encryption vs Hashing vs Obfuscation
[정보보안] 3. Encoding vs Encryption vs Hashing vs Obfuscation
친구랑 이런저런 이야기를 나누다가, Encoding과 Encryption에 대한 이야기가 나왔다. 두 용어를 오용하여 혼났는데, 이 참에 다시한번 해당 개념에 대해 정리해보려한다.
1. Encoding
- Encoding은 쉽게 생각해서 '치환' 이라고 보면 된다.
- URL Encoding, 즉 사용자가 타이핑 한 값을 컴퓨터가 이해할 수 있도록 '치환' 해주는 Encoding.
- 그러므로 Encoding은 Security의 측면에서는 전혀 역할이 없다고 볼 수 있다.
- 심지어 이러한 Encoding들은 Encoding Table과 같은 방식으로 모든 정보가 공개되어있어, 역연산 또한 쉽다.
2. Encryption
- Encryption은 흔히 우리가 생각하는 '암호화' 이다.
- 타 사용자가 내 정보를 알아볼 수 없도록 숨기는 것이다.
- 앞에서 말한 '치환'과 비슷하다고도 생각할 수 있는데, Encryption은 Key 개념을 이용하여 '특정 사용자' 만이 해당 정보를 역연산 할 수 있다.
- 또한 '컴퓨터가 이해할 수 있도록 바꾼다' 와 같은 개념이 아님을 생각해보면 둘의 차이를 이해하기 쉽다.
- 다양한 암호화 알고리즘들이 공개되어있지만, 이들은 '역연산' 자체가 어렵기에 암호문을 알아도 복호화하기가 불가능하다.
3. Hashing
- Hashing 또한 암호화와 혼동하기 쉬운데, 이는 단순히 'integrity check'를 위한 개념이라고 보면 쉽다.
- 물론 단지 저것만을 위한 기법은 아니지만, 대부분의 Hashing은 정보의 무결성을 검증하고자 할 때 사용한다.
- 혹은, 데이터를 효율적으로 저장하기 위해서도 종종 사용하곤 한다. 데이터베이스의 크기를 줄이기 위한다던가. 혹은 cache에도 사용된다.
4. Obfuscation
- Obfuscation은 'Reverse Engineer'가 프로그램을 뜯어? 해부하여? 리버스 엔지니어링 하여! 프로그램 내부를 알고자 할 때, 이를 어렵게 하기 위한 기법이다.
- 지금까지 이를 도입한 프로그램을 몇번 본 적이 있는데, 게임 매크로 라던가 악성코드가 대부분이었다.
- 아 그리고 Mobile App 중에서도 특히 게임들이 이를 이용해 코드를 알 수 없도록 하곤 했다.