[알고리즘] 보안 알고리즘 1
보안 알고리즘의 필요성
서버 개발을 하면서 우리는 다양한 네트워크와 기기를 통해 데이터를 전달하게 됩니다. 그러다보면 보안이 중요한 데이터를 다루는 경우가 생기는데 그때마다 혹시 데이터가 탈취 당하지는 않을까 걱정을 하게 됩니다. 단순히 로컬 기기에서만 동작하는 소프트웨어를 만드는게 아니라면 개발자는 보안에 대해 염두해두고 있어야 합니다. 언제든 악의를 품은 사람이 관리하는 기기를 데이터가 경유한다면 데이터를 탈취 당할 수 있습니다. 이를 방지하고자 보안 알고리즘이 필요합니다.
데이터 송수신 시 발생 가능한 문제
인터넷에서 데이터를 주고 받을 때 발생할 수 있는 대표적인 네 가지 문제가 있습니다.
-
도청
A가 B에게 메시지를 보낼 때 X가 경로 중간에 메시지 내용을 훔쳐보는 것 -
위장
A가 B에게 메시지를 보내려고 하는데 X가 A에게 자신이 B라고 속이고 데이터를 받거나, X가 B에게 자신이 A라고 속이고 메시지를 주는 것 -
변조
A가 B에게 메시지를 보냈지만 경로 도중 X에 의해 메시지가 변경되는 것 -
사후 부인
B가 A에게 메시지를 받았지만, 나중에 A가 악의적으로 본인이 보낸 메시지가 아니라고 부인하는 것
보안 기술
위와 같은 문제를 해결하기 위한 보안 기술들이 있습니다. 우선은 각 문제에 대응하는 보안 기술을 언급만 해보자면 아래와 같습니다.
-
암호화
도청을 막기 위해서 암호화 기술을 사용 -
메시지 인증 코드
위장과 변조를 막기 위해서 메시지 인증 코드를 사용 -
디지털 서명
위장과 변조, 사후 부인을 막기 위해서 디지털 서명을 사용
암호와 해시함수
암호화
악의를 가진 제 3자가 데이터를 도청할 수 있습니다. 이를 방지하기 위해 데이터를 의미를 알 수 없도록 암호화하여 전송합니다. 이러한 암호화가 적용된 데이터를 암호문이라고 합니다.
컴퓨터 상에서 데이터는 모두 이진수 숫자이고 암호화란 데이터에 어떤 연산을 적용하여 컴퓨터가 해석할 수 없는 또 다른 숫자로 바꾸는 것을 의미합니다. 반대로 복호화는 암호문을 원본 데이터로 복원하는 것 입니다.
A가 암호화한 암호문을 B에게 전달하면 B는 암호문을 원본 데이터로 복호화하여 사용합니다. 제 3자는 도청하여 데이터를 얻어내지만 암호문이기 때문에 원본 데이터를 알 수 없습니다. 이렇게 제 3자가 의미를 알 수 없도록 데이터를 변환하고 다시 원래대로 되돌리는 일련의 계산을 암호화 기술이라고 합니다.
해시함수
해시함수는 주어진 데이터를 고정된 길이의 불규칙한 값으로 변환하는 함수입니다. 이렇게 얻은 불규칙한 값을 해시값이라고 하며 다양한 상황에 사용할 수 있습니다. 해시값은 숫자이며 16진수로 표기하는 경우가 많습니다.
해시함수의 대표적인 알고리즘은 MD5
, SHA-1
, SHA-2
등이 있습니다. 현재는 MD5
와 SHA-1
의 안전성에 문제가 있어서 사용을 권장하지 않고 SHA-2
의 사용을 권장합니다. 이러한 SHA-2
는 편의상 해시값의 길이에 따라 SHA-256, SHA-512 등으로 부릅니다.
해시함수의 특징
-
출력하는 값의 데이터 길이가 일정합니다. 매우 크거나 작은 데이터를 입력해도 출력 데이터의 길이는 동일합니다.
-
같은 입력값에 대한 출력은 동일합니다.
-
비슷한 데이터가 입력되어도 데이터가 1비트만 다르다면 출력 결과는 크게 달라집니다.
-
완전히 다른 데이터를 입력해도 적은 확률로 동일한 해시값이 나올 수 있습니다. 이를 해시 충돌이라고 합니다.
-
해시값에서 원본 데이터를 역산하는 것은 사실상 불가능합니다. 데이터의 입력과 출력은 단방향입니다. 이 점이 암호화와 다른 부분입니다.
-
해시값을 구하는 연산은 고속으로 계산이 가능합니다.
이런 해시함수의 특성 덕분에 해시값을 통해 데이터의 일치 여부를 알 수 있습니다. 물론 해시 충돌 문제가 존재하지만 적은 확률이므로 일반적인 상황에서는 같은 값이라고 판단합니다.
실제 사용 예시로는 비밀번호 등 민감한 사용자 데이터를 DB에 저장할 때 해시값을 사용합니다. 비밀번호는 입력 받은 데이터의 진위여부만 알 수 있다면 원본 데이터는 알 필요가 없기 때문입니다.
해시함수와 메시지 인증 코드
메시지 인증 코드와 일방향 해시 코드의 차이는 키를 사용하는 것
사용자별 상이한 키를 사용하여 인증을 할 수 있다!
- 해시함수 →
무결성
- 메시지 인증 코드 →
무결성
+인증
메시지 + 키 → 해시함수, 블록암호, 공개키 암호 … → MAC (Message Authentication Code)[메시지 인증 코드 사용 과정]
댓글남기기