라바 램프는 인터넷 암호화에 어떻게 도움이 될까요?

Cloudflare에서는 라바 램프 100개의 사진을 임의의 데이터로 변환하여 SSL 암호화에 사용합니다.

학습 목표

이 글을 읽은 후에 다음을 할 수 있습니다:

  • 암호화 키에 무작위성이 필요한 이유 알아보기
  • 컴퓨터가 스스로 무작위성을 생성할 수 없는 이유 설명
  • 컴퓨터가 무작위 입력을 사용하여 무작위 출력을 생성하는 방법 이해하기
  • 암호화 시드가 무엇인지 알아보기
  • 라바 램프로 암호화 시드에 필요한 무작위 데이터를 생성하는 방법 이해하기

관련 콘텐츠


계속 알아보시겠어요?

인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!

Cloudflare가 개인 데이터를 수집하고 처리하는 방법은 Cloudflare의 개인정보 취급방침을 참조하세요.

글 링크 복사

Cloudflare에서 라바 램프를 사용하여 암호화를 지원하는 이유는?

무작위성은 안전한 암호화를 위해 매우 중요합니다. 컴퓨터가 데이터를 암호화하는 데 사용하는 각각의 새로운 키는 공격자가 키를 알아내어 데이터를 해독할 수 없도록 완전히 무작위적이어야 합니다. 그러나 컴퓨터는 주어진 입력에 따라 예측 가능하고 논리적인 출력을 제공하도록 설계되어 있습니다. 컴퓨터는 예측할 수 없는 암호화 키를 생성하는 데 필요한 임의의 데이터를 생성하도록 설계되지 않았습니다.

강력한 암호화에 필요한 예측할 수 없는 혼란스러운 데이터를 생성하려면 컴퓨터에 무작위 데이터 소스가 있어야 합니다. 물리적 세계의 이벤트는 예측할 수 없으므로 "실제 세계"는 무작위성을 위한 훌륭한 소스로 밝혀졌습니다.

모두 예상할 수 있듯이 라바 램프는 일관되게 무작위적입니다. 라바 램프의 "라바"는 결코 같은 모양을 두 번 취하지 않으므로 라바 램프 그룹을 관찰하는 것은 무작위 데이터를 얻기 위한 훌륭한 소스입니다.

Cloudflare 라바 램프 벽

이 데이터를 수집하기 위해 Cloudflare 본사 로비의 한 벽면에 약 100개의 라바 램프를 배치하고 램프를 향하여 카메라 한 대를 장착했습니다. 이 카메라는 일정한 간격으로 램프의 사진을 찍고 이미지를 Cloudflare 서버로 보냅니다. 모든 디지털 이미지는 실제로 컴퓨터에 일련의 숫자로 저장되며, 각 픽셀은 고유한 숫자 값을 가지므로 각 이미지는 완전히 무작위 숫자의 문자열이 되어 Cloudflare 서버가 보안 암호화 키를 생성하기 위한 시작점으로 사용할 수 있습니다.

따라서 라바 램프의 도움으로 Cloudflare는 고객에게 아주 강력한(그리고 충분히 무작위적인) SSL/TLS 암호화를 제공할 수 있습니다. 수백만 개의 인터넷 자산에서 Cloudflare를 사용한다는 점을 고려하면 이는 특히 중요합니다.

전자책
보안 및 성능을 극대화하는 5가지 방법

전문가 상담
Cloudflare가 비즈니스를 보호하는 방법 알아보기

암호화에서 '무작위'란 무엇을 의미할까요?

암호화에서 무작위란 통계적으로 무작위적이라는 의미뿐 아니라 예측할 수 없다는 의미도 있습니다.

예측 가능한 데이터는 추측할 수 있으므로 암호화된 데이터는 완전히 무작위 데이터처럼 보여야 합니다. 암호화에 특정 값이 다른 값보다 더 많이 사용되거나 특정 순서로 일관되게 나타나는 등 패턴이 있는 경우, 수학적 분석을 통해 패턴을 파악하면 공격자가 암호화에 사용되는 키를 훨씬 더 쉽게 추측할 수 있습니다. 기본적으로, 암호화된 데이터는 예측이 가능하다면 이미 유출되었을 가능성이 높습니다.

암호화 과정 자체는 예측 가능합니다. 암호화된 데이터에 올바른 키를 추가하면 복호화된 데이터가 되고, 복호화된 데이터는 암호화되기 전의 데이터와 동일합니다.하지만 사용되는 암호화 키는 예측할 수 없어야 합니다.

예측 불가능성이 왜 중요한지 이해하려면 두 명의 포커 플레이어를 상상해 보세요. Bob은 항상 좋은 카드를 가지고 있을 때는 베팅을 하고, 나쁜 카드를 가지고 있을 때는 죽습니다(다른 플레이어의 베팅에 응하여 베팅하지 않음). 한편 Alice는 베팅 전략을 혼용하여 뚜렷한 패턴이 없도록 하는데, 때로는 좋은 카드를 가지고 있을 때 베팅하고, 때로는 다른 플레이어의 베팅에 같은 금액을 베팅하는 것으로 만족하며, 때로는 나쁜 카드를 가지고 있을 때 큰 금액을 베팅하여 블러핑을 하기도 합니다. Alice와 Bob이 같은 포커 토너먼트에 참가했을 때, Bob은 너무 예측 가능하므로 Alice가 Bob보다 훨씬 탈락하지 않고 오래 버팁니다. 상대는 Bob이 언제 좋은 카드를 가지고 있는지 빠르게 파악하고 그에 따라 반응합니다. 상대방의 카드를 직접 볼 수는 없지만, 어떤 카드를 들고 있는지 대략적으로 파악할 수 있습니다.

마찬가지로 공격자는 네트워크를 통해 전송된 "카드", 즉 암호화된 콘텐츠를 볼 수 없지만, 콘텐츠를 숨기는 방법이 너무 예측 가능하면 이를 추측할 수 있습니다.

컴퓨터에서는 왜 무작위성을 만들 수 없을까요?

컴퓨터는 논리로 작동합니다. 컴퓨터 프로그램은 if-then 구문을 기반으로 합니다. 특정 조건이 충족되면 이 지정된 작업을 수행합니다. 프로그램에 동일한 입력을 하면 매번 동일한 출력이 생성됩니다.

이는 의도된 것입니다. 입력은 예상치 못한 출력이 아니라 예상되는 출력으로 이어져야 합니다. 프린터가 프린터로 전송된 문서의 텍스트와 다른 임의의 텍스트를 인쇄하거나 스마트폰이 사용자가 입력한 전화번호와 다른 전화번호로 전화를 걸면 얼마나 혼란스러울지 상상해 보세요. 컴퓨터는(상대적인) 신뢰성과 예측 가능성 때문에 유용합니다. 그러나 이러한 예측 가능성은 안전한 암호화 키를 생성하는 데 있어서는 부담으로 작용합니다.

일부 컴퓨터 프로그램은 무작위적 시뮬레이션에는 유용하지만 암호화 키를 생성하는 데는 충분하지 않습니다.

가입
모든 Cloudflare 요금제의 보안 및 속도

컴퓨터에서 어떻게 임의의 실제 입력을 사용하여 임의의 데이터를 생성할 수 있을까요?

의사 난수 생성기(PRNG)라는 소프트웨어 프로그램은 예측할 수 없는 입력을 받아 예측할 수 없는 출력을 생성하는 데 사용할 수 있습니다. 이론적으로 PRNG는 임의의 입력에서 임의의 출력을 무제한으로 생성할 수 있습니다.

이러한 알고리즘은 출력 값이 실제로 완전히 무작위가 아니므로 "random" 이 아닌 "pseudorandom" 이라고 합니다. 왜 이런 일이 발생할까요? 크게 두 가지 이유가 있습니다.

  1. 동일한 시드로 두 번 연속으로 시작하면 PRNG는 정확히 동일한 결과를 생성합니다.
  2. PRNG가 무한정 실행되는 경우 생성되는 결과가 항상 완전히 무작위인지 증명하기는 어렵습니다.

두 번째 이유 때문에 알고리즘은 계속해서 새로운 무작위성 입력을 필요로 합니다. 임의의 입력값을 "암호화 시드"라고 합니다.

암호학적으로 안전한 의사 난수 생성기란?

암호학적으로 안전한 의사 난수 생성기(CSPRNG)는 보다 엄격한 표준을 충족하는 PRNG로, 암호화에 사용하기에 더 안전합니다. CSPRNG는 PRNG가 충족하지 못할 수 있는 두 가지 요구 사항을 충족합니다.

  1. 예측 불가능성을 증명하려면 특정 통계적 무작위성 테스트를 통과해야 합니다.
  2. 공격자가 프로그램에 부분적으로 액세스할 수 있더라도 CSPRNG의 출력을 예측할 수 없어야 합니다.

PRNG와 마찬가지로 CSPRNG는 더 많은 무작위 데이터를 생성하기 위한 시작점으로 무작위 데이터(암호화 시드)가 필요합니다.

SSL/TLS 암호화를 위한 암호화 키를 생성하기 위해 Cloudflare는 라바 램프에서 수집한 데이터를 암호화 시드의 일부로 사용하여 CSPRNG를 사용합니다.

암호화 시드란?

암호화 시드는 무작위 데이터를 생성하기 위해 CSPRNG가 시작하는 데이터입니다. 이론적으로는 하나의 암호화 시드에서 무제한의 무작위 출력을 생성할 수 있지만, 암호화 시드를 정기적으로 갱신하는 것이 훨씬 더 안전합니다. 공격자는 결국 초기 암호화 시드를 손상시킬 수 있으며, 동일한 시드가 공급되면 CSPRNG는 똑같은 출력을 다시 생성하므로 공격자는 임의의 출력을 복제할 수 있습니다. 또한, 가장 엄격한 테스트를 거친 CSPRNG라 하더라도 예측할 수 없는 결과가 무한정 발생한다는 보장은 없습니다.

라바 램프를 통해 Cloudflare에서는 새로운 암호화 시드 데이터에 대한 지속적인 소스를 확보합니다. 카메라가 램프를 촬영할 때마다 이미지가 다르므로 시드로 사용할 수 있는 숫자 값의 무작위 시퀀스가 달라집니다.

라바 램프가 암호화 시드의 유일한 소스일까요?

많은 운영 체제에는 암호화 시드에 사용할 자체 임의 데이터 소스(예: 마우스 움직임, 키보드 입력 등)가 있지만, 이 데이터는 비교적 느리게 수집됩니다. Cloudflare에서는 라바 램프에서 얻은 무작위 데이터를 두 대의 다른 컴퓨터에서 Linux 운영 체제로 생성한 데이터와 혼합하여 SSL/TLS 암호화를 위한 암호화 시드를 생성할 때 엔트로피를 최대화합니다.

엔트로피란?

일반적으로 "엔트로피" 는 무질서나 혼돈을 의미합니다. 하지만 엔트로피는 암호화에서는 특별한 의미가 있습니다. 바로 예측 불가능성입니다. 암호학자들은 주어진 데이터 세트가 엔트로피 비트 수 측면에서 얼마나 많은 엔트로피를 가지고 있는지 실제로 측정합니다. 이 때문에 Cloudflare에서는 라바 램프 벽을 "엔트로피의 벽"이라고 부릅니다.

누군가 라바 램프 앞에 서 있으면 어떻게 될까요?

라바 램프 벽은 Cloudflare 본사의 분주한 로비에 있으므로 항상 이런 일이 생깁니다. 사람들이 로비를 오가며 지나가기도 하고 램프 앞에 멈춰 서서 이야기를 나누기도 합니다. 이러한 장애물은 카메라가 포착하는 무작위성의 일부가 되므로 사람들이 라바 램프를 향하는 카메라의 시야를 부분적으로 가리는 것은 실제로 엔트로피 생성에 도움이 됩니다.

누군가 카메라를 끄거나 손상시키면 어떻게 될까요?

이 경우에도 Cloudflare 서버에서 실행되는 Linux 운영 체제에 무작위화를 위한 두 개의 다른 소스가 있습니다. 또한, Cloudflare에서 소유한 공간에 있으므로 카메라에 물리적으로 쉽게 액세스할 수 있으며, 필요에 따라 Cloudflare에서 신속하게 카메라를 다시 켜거나 교체할 수 있습니다.

모든 Cloudflare 사무실에 라바 램프 벽이 있을까요?

Cloudflare의 주요 지사 두 곳은 런던과 싱가포르에 있으며, 각 지사에서는 실제 입력으로부터 무작위 데이터를 생성하는 고유한 방법을 갖추고 있습니다. 런던지사에서는 사무실에 설치된 이중 진자 시스템(수학적으로 움직임을 예측할 수 없는 진자에 연결된 진자)의 사진을 찍습니다. 싱가포르 지사에서는 우라늄 펠릿의 방사성 붕괴를 측정합니다(무해할 정도로 소량임).

Cloudflare가 라바 램프를 암호화에 사용한 최초의 회사일까요?

놀랍게도 아닙니다. 실리콘 그래픽스라는 회사에서 1996년에 "라바랜드" 라는 유사한 시스템을 설계했지만, 그 특허는 만료되었습니다.

Cloudflare 라바 램프 벽에 대해 자세히 알아보려면 다음 두 블로그 게시물을 확인하세요.

Cloudflare의 무료 SSL 암호화 사용 방법을 알아보려면 이 페이지를 참조하세요.