보안

Encryption 개념 정리

일렉멍멍이 2025. 8. 6. 22:57

Encryption

비밀번호 등 민감 정보 보호에는 주로 해시 알고리즘을 사용하며, 대표적으로 bcrypt가 많이 쓰인다.



Hash Function

해시 알고리즘은 임의의 입력값을 빠른 데이터 검색을 목적으로 어떤 수학적 연산을 통해 고정된 길이의 값으로 변환하는 단방향 알고리즘이다.

  • 해시 함수를 통해 변환된 값를 다이제스트(Digest)라고 하며, 같은 입력값에 대해서 항상 동일한 결과값을 보장한다.
  • 해시 함수를 통해 변환된 값은 복호화할 수 없다.
  • bcrypt는 해커가 레인보우 테이블이나 브루트포스 공격을 하지 못하도록 일부러 느리게 동작하게 설계된 해시 알고리즘이다.
  • md5와 sha1은 보안상 취약하여 실무에서는 사용되지 않는다.

Hash Collision

알고리즘을 통해 고정된 값으로 변환한다는 해시의 특징을 고려해보면, 출력할 수 있는 값의 수는 알고리즘에 대한 의존성을 가진다. 즉, 입력값은 무한하나 출력값은 유한하다는 것이다. 그래서 해시 알고리즘에 다양한 입력값을 계속 넣다보면 언젠가는 중복된 결과를 출력하게 된다.

대표적인 예로는 가장 단순한 해시 함수인 나눗셈-나머지 방식이 있다.
a % b의 결과값은 a에 어떠한 숫자값이 와도 0부터 b까지의 값이 반복하여 나오게 된다.

해시 함수를 사용하는 입장에서는 입력에 대한 결과값이 모두 다르기를 기대하나, 이렇게 동일한 값이 나올 때를 해시 충돌이 발생했다고 한다.

이러한 해시 충돌은 다음과 같은 문제가 발생한다.

  1. 무결성 검증 실패: 원본과 다른 값을 제출했지만 해시 충돌로 인해 시스템이 원본으로 오인할 수 있다. 예를 들어 로그인, 전사서명 등을 할 때, 전혀 다른 값을 제출해도 인증에 성공한 것으로 처리될 수 있다.
  2. 공격 난이도 하락: 해시 충돌이 쉽게 발생하는 알고리즘은 해커가 브루트포스나 레인보우 테이블을 통해 원본 데이터 유추, 위조, 인증 우회 등의 공격을 쉽게 할 수 있다.

md5와 sha1은 이러한 이유로 인해 보안상 취약하다고 평가된다.

Rainbow Table

같은 입력값에 대해서 항상 동일한 결과값을 보장한다는 특성 때문에, 해커들이 여러 값들을 대입해보면서 얻었던 Digest들을 모아놓은 리스트를 레인보우 테이블이라고 한다.
이 테이블을 인터넷에 검색하면 누구나 사용할 수 있기 때문에, 해시 함수 한 번만으로 데이터를 저장하기에는 문제가 있다.

Brute Force

빠른 검색이 목적인만큼 해시의 결과값을 얻는 속도가 빠르기 때문에, 해커들이 문자를 하나씩 대입해보면서 Digest를 얻는 속도 또한 매우 빠르다. 결과적으로 해커들은 이 과정을 통해 레인보우 테이블을 만들어낼 수 있다.

sha-256의 경우에는 256개의 bit로 이루어졌기 때문에, 2^256의 경우의 수가 존재한다. 이론적으로는 한 대의 컴퓨터 연산으로는 알아내기 쉽지 않다는 것이다. 하지만 개인마다 패스워드를 사용하는 패턴이 존재하고, 이는 경우의 수를 줄여준다. 결국 특정 문자열에 대해 유추가 가능해진다는 말이다. 또한, 해시 충돌을 활용해 데이터를 위조할 수도 있다.



보안을 강화하기 위한 Key-Stretching

해시 연산을 반복하거나 복잡하게 만들어 공격을 어렵게 만드는 기법

해시의 특성상 동일한 패스워드가 존재할 경우에는 하나의 패스워드가 뚫리면 동일한 패스워드를 사용하는 사용자들의 패스워드도 다 뚫리게 된다.
하지만 이러한 문제를 단순히 해시 함수와 개개인마다 랜덤하게 생성된 문자열인 Salt를 여러번 사용해 해커들이 유추하기 매우 어렵게 만들 수 있다.

  1. 원본 값에 Salt를 더하면 원본과는 다른 Digest를 얻게 된다.
  2. 1에서 생성된 Digest에 다시 Salt 붙여서 Digest 생성한다.
  3. 위 과정을 반복한다.

이로 인해 유저 입장에서는 로그인하는데 걸리는 시간이 소량 증가하게 된다. 하지만 해커 입장에서는 고려해야 하는 경우의 수가 기하급수적으로 증가하게 된다. 이를 통해 브루트포스를 무력화하게 되고, 레인보우 테이블이 만들어지지 못하게 한다.

이 기법을 활용하는 대표적인 알고리즘은 bcrypt, PBKDF2, scrypt가 있다.

반응형