가장 기본 개념이기도 하며, 설계 면접 문제에도 등장할 수 있는 개념입니다.
데이터가 유저로 부터 데이터베이스에 저장되기 까지 네트워크 레이어에서 오류나 injection등으로 인해 손실이 일어날 수 있습니다. 손실된 데이터를 data corruption이라고 하는데, 이를 보호하는 방법 중 체크섬을 사용합니다.
👉 센더(sender)가 체크섬을 만들고, 체크섬을 함께 보내고 리시버(receiver)가 자체 계산한 체크섬과 센더가 보낸 체크섬을 확인한다. 센더와 리시버 간 체크섬이 매칭하지 않는 경우, 시스템은 데이터 손실이 일어난 것으로 판단한다.
👉 암호화 해시 함수(Cryptographic Hash Function)
- MD5
- SHA-1
- SHA-256
- SHA-512
MD5(Message Digest Algorithm 5)는 1992년도에 만들어졌고, 126-bit체크섬을 만든다. MD5암호 알고리즘은 SHA(Security Hash Algorithms)보다 빠르지만 덜 안전하다. SHA-512가 SHA-256보다 더 안전하다. Data Integrity의 중요성에 따라 다른 암호화 해시 함수를 사용한다.
👉 체크섬을 만들 때 암호화 해시 함수를 이용한다. 그리고 만들어진 체크섬을 데이터와 함께 저장한다.
👉 데이터를 Write할 때 유저가 보낸 데이터를 기반으로 체크섬이 만들어지고 데이터베이스에 도달하기 전에 거치는 서비스 간 체크섬 확인이 이루어진 후 데이터베이스에 저장된다.
👉 데이터를 Read할 때는 데이터베이스에 저장된 체크섬이 계산된 체크섬과 같은지 확인한다.
📌 추가
- 시스템을 설계할 때 End-to-End Checksum이 되도록 해야 합니다. 하위 시스템 설계에서 체크섬 갭이 있다면 체크섬이 있어도 데이터 손실이 일어날 수 있습니다.
- 해시 함수에 관해 공부할 때 해시 충돌(hash collision)에 대해 함께 공부하면 좋습니다. MD5는 SHA에 비해 해시 충돌 저항성이 적습니다. 100% 해시 충돌 저항성을 보장하는 알고리즘은 아니지만 충돌 가능성을 거의 희박하게 합니다.
- 순환 중복 검사/CRC(Cyclic Redundancy Check) 개념도 간략하게 함께 알아두면 좋을 것 같습니다. 암호 해시 함수는 주어진 데이터에 안전한 해시값을 계산하는 알고리즘이고, CRC는 주로 오류 감지에 사용됩니다.
https://www.youtube.com/watch?v=toYnC5PoM08