오늘 끝나면
난수와 엔트로피
- ✓난수와 엔트로피의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 난수와이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
예측 불가가 보안의 뿌리 — 나쁜 난수가 뚫리는 법 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
암호 & 보안 · 13
난수와
엔트로피
예측 불가능함이 모든 보안의 뿌리다. 난수가 허술하면 키도 통째로 뚫린다.
키도 토큰도 다 난수로 만든다
암호의 안전은 난수에 걸려 있다. 비밀키, 솔트, 세션토큰을 모두 난수로 뽑는다.
난수를 쓰는 이유는 아무도 못 맞히게 하려는 것이다. 키가 예상 가능한 값이면 이미 비밀이 아니다. 자물쇠 번호를 1234로 맞춘 것과 같다.
그래서 보안에서 난수는 장식이 아니다. 난수의 질이 곧 키의 질이다. 여기가 약하면 위에 쌓은 암호가 전부 같이 무너진다.
난수가 약하면 이 넷이 한꺼번에 약해진다
컴퓨터 난수는 사실 계산된 가짜다
컴퓨터는 진짜 난수를 못 만든다. 우리가 쓰는 건 대부분 의사난수(PRNG)다.
PRNG는 시드(씨앗) 하나를 정해두고 공식으로 다음 값을 줄줄이 계산한다. 무작위처럼 보여도 속은 정해진 계산이다.
그래서 시드를 알거나 공식이 약하면 다음 값이 그대로 계산된다. 무작위가 아니라 미리 정해진 수열이었던 것이다.
무작위로 보여도 속은 정해진 계산이다
점을 뿌려보면 약함이 보인다
난수로 점을 화면에 뿌리면 약함이 눈에 보인다.
나쁜 난수를 켜면 점이 줄무늬나 격자로 뭉친다. 공식이 약해 패턴이 새어 나온 것이다. 이 줄무늬가 곧 약함의 증거다.
나쁜 쪽은 공식 하나로 굴러서 다음 점이 정확히 예측된다. 키를 추측당하는 것이다. 좋은 쪽은 잡음이 섞여 빗나간다.
공격자는 마지막 값으로 다음 값을 계산해 본다. 십자(⊕)가 진짜 다음 점 위에 떨어질까?
시드가 약하면 전부 예측된다
공식이 멀쩡해도 시드가 허술하면 끝이다. 시드가 출발점이라, 출발점을 알면 수열 전체가 따라온다.
흔한 실수가 현재 시각을 시드로 쓰는 것이다. 키가 언제 만들어졌는지 알면 그 근처 시각 몇 개만 넣어봐도 같은 키가 다시 나온다.
실제로 약한 시드 때문에 지갑 키와 세션토큰이 통째로 털린 사고가 여러 번 있었다. 예측 가능한 시드는 예측 가능한 키다.
| 시드 | 결과 |
|---|---|
| 시드 = 1234 | 고정값매번 같은 키라 즉시 뚫린다 |
| 시드 = 현재 시각 | 짐작 가능시각 몇 개만 넣어보면 된다 |
| 시드 = 잡음 모음 | 예측 불가출발점부터 무작위라 안전하다 |
진짜 보안엔 엔트로피가 필요하다
해법은 엔트로피다. 엔트로피는 예측 불가능한 잡음이다.
마우스 움직임, 키 입력 타이밍, 전기 잡음, 디스크 지연처럼 아무도 못 맞히는 잡음을 긁어모아 시드로 쓴다. 출발점이 무작위라 다음 값을 계산할 수가 없다.
그래서 보안용 난수는 CSPRNG(암호학적 난수)를 쓴다. 충분한 엔트로피로 시드를 채워 다음 값을 절대 못 맞히게 만든 난수다. 키를 진짜 비밀로 지켜주는 뿌리다.
Q. 난수가 보안에서 중요한 이유는?
키와 토큰이 난수로 만들어지기 때문이다. 난수가 예측되면 키가 추측당해 암호 전체가 무너진다. 그래서 예측 불가능한 엔트로피로 만든 난수라야 안전하다.출발점이 무작위라 수열 전체가 무작위다