컴퓨터가 난수를 생성하는 방법

컴퓨터는 암호화에서 비디오 게임 및 도박에 이르기까지 모든 것에 대해 난수를 생성합니다. 난수에는 "진정한"난수와 의사 난수라는 두 가지 범주가 있으며 그 차이는 암호화 시스템의 보안에 중요합니다.

컴퓨터는 예측할 수없는 마우스 움직임이나 팬 소음과 같은 일부 외부 데이터를 관찰하고 그로부터 데이터를 생성함으로써 진정한 난수를 생성 할 수 있습니다. 이것은 엔트로피로 알려져 있습니다. 다른 경우에는 알고리즘을 사용하여 "의사 난수"숫자를 생성하므로 결과가 아닌 경우에도 무작위로 나타납니다.

이 주제는 최근 인텔의 내장 하드웨어 난수 생성기 칩이 신뢰할 수 있는지에 대해 많은 사람들이 의문을 제기하면서 더욱 논란이되고 있습니다. 신뢰할 수없는 이유를 이해하려면 처음에 난수가 생성되는 방식과 용도를 이해해야합니다.

난수는 무엇에 사용됩니까?

난수는 수천 년 동안 사용되었습니다. 동전 던지기 든 주사위 던지기 든 목표는 최종 결과를 임의의 기회에 남겨 두는 것입니다. 컴퓨터의 난수 생성기는 유사합니다. 예측할 수없는 임의의 결과를 얻기위한 시도입니다.

관련 : 암호화 란 무엇이며 어떻게 작동합니까?

난수 생성기는 다양한 목적에 유용합니다. 도박을 목적으로 난수를 생성하거나 컴퓨터 게임에서 예측할 수없는 결과를 생성하는 것과 같은 명백한 응용 프로그램 외에도 임의성은 암호화에 중요합니다.

암호화에는 공격자가 추측 할 수없는 숫자가 필요합니다. 우리는 같은 숫자를 계속해서 사용할 수 없습니다. 공격자가 추측 할 수 없도록 예측할 수없는 방식으로 이러한 수치를 생성하고자합니다. 이러한 난수는 자신의 파일을 암호화하든 인터넷에서 HTTPS 웹 사이트를 사용하든 안전한 암호화에 필수적입니다.

진정한 난수

컴퓨터가 실제로 난수를 생성하는 방법이 궁금 할 수 있습니다. 이 "무작위"는 어디에서 오는 것입니까? 컴퓨터 코드의 일부라면 컴퓨터가 생성하는 숫자를 예측할 수 있지 않을까요?

우리는 일반적으로 컴퓨터가 생성하는 난수를 생성 방법에 따라 "진정한"난수와 의사 난수라는 두 가지 유형으로 그룹화합니다.

"진정한"난수를 생성하기 위해 컴퓨터는 컴퓨터 외부에서 발생하는 어떤 유형의 물리적 현상을 측정합니다. 예를 들어, 컴퓨터는 원자의 방사능 붕괴를 측정 할 수 있습니다. 양자 이론에 따르면 방사성 붕괴가 언제 발생할지 확실하게 알 수있는 방법이 없기 때문에 이것은 본질적으로 우주로부터의“순수한 무작위성”입니다. 공격자는 방사능 붕괴가 언제 발생할지 예측할 수 없으므로 임의의 값을 알 수 없습니다.

더 일상적인 예를 들어, 컴퓨터는 대기 소음에 의존하거나 단순히 키보드에서 키를 누르는 정확한 시간을 예측할 수없는 데이터 또는 엔트로피의 소스로 사용할 수 있습니다. 예를 들어 컴퓨터에서 오후 2시 이후 정확히 0.23423523 초에 키를 눌렀 음을 알 수 있습니다. 이러한 키 누름과 관련된 특정 시간을 충분히 확보하면 "진정한"난수를 생성하는 데 사용할 수있는 엔트로피 소스를 갖게됩니다. 당신은 예측 가능한 기계가 아니기 때문에 공격자는 당신이이 키를 누를 때 정확한 순간을 추측 할 수 없습니다. Linux의 / dev / random 장치는 난수를 생성하고 "블록"하며 진정한 난수를 반환하기에 충분한 엔트로피를 수집 할 때까지 결과를 반환하지 않습니다.

의사 난수

의사 난수는 "진정한"난수에 대한 대안입니다. 컴퓨터는 시드 값과 알고리즘을 사용하여 무작위로 보이지만 실제로는 예측 가능한 숫자를 생성 할 수 있습니다. 컴퓨터는 환경에서 임의의 데이터를 수집하지 않습니다.

이것은 모든 상황에서 반드시 나쁜 것은 아닙니다. 예를 들어 비디오 게임을하는 경우 해당 게임에서 발생하는 이벤트가 "진정한"난수 또는 의사 난수에 의해 발생하는지 여부는 실제로 중요하지 않습니다. 반면에 암호화를 사용하는 경우 공격자가 추측 할 수있는 의사 난수를 사용하고 싶지 않습니다.

예를 들어 공격자가 의사 난수 생성기가 사용하는 알고리즘과 시드 값을 알고 있다고 가정 해 보겠습니다. 그리고 암호화 알고리즘이이 알고리즘에서 의사 난수를 가져 와서 추가 임의성을 추가하지 않고 암호화 키를 생성하는 데 사용한다고 가정 해 보겠습니다. 공격자가 충분히 알고 있으면 거꾸로 작업하여 암호화 알고리즘이 선택한 의사 난수를 확인하여 암호화를 깨뜨릴 수 있습니다.

NSA 및 인텔의 하드웨어 난수 생성기

개발자가보다 쉽게 ​​작업을 수행하고 안전한 난수 생성을 돕기 위해 인텔 칩에는 RdRand라는 하드웨어 기반 난수 생성기가 포함되어 있습니다. 이 칩은 프로세서의 엔트로피 소스를 사용하고 소프트웨어가 요청할 때 소프트웨어에 난수를 제공합니다.

여기서 문제는 난수 생성기가 본질적으로 블랙 박스이고 그 안에서 무슨 일이 일어나는지 알지 못한다는 것입니다. RdRand에 NSA 백도어가 포함 된 경우 정부는 해당 난수 생성기에서 제공하는 데이터만으로 생성 된 암호화 키를 깰 수 있습니다.

이것은 심각한 문제입니다. 2013 년 12 월, FreeBSD의 개발자들은 RdRand를 무작위 소스로 직접 사용하는 것에 대한 지원을 제거했습니다. [출처] RdRand 장치의 출력은 추가 엔트로피를 추가하는 다른 알고리즘에 입력되어 난수 생성기의 백도어가 중요하지 않도록합니다. Linux는 이미 이러한 방식으로 작동하여 백도어가 있어도 예측할 수 없도록 RdRand에서 오는 임의 데이터를 추가로 무작위 화했습니다. [출처] Reddit의 최근 AMA ( "Ask Me Anything")에서 인텔 CEO Brian Krzanich는 이러한 우려에 대한 질문에 대답하지 않았습니다. [출처]

물론 이것은 인텔 칩의 문제가 아닐 가능성이 높습니다. FreeBSD 개발자들도 Via의 칩을 이름으로 불렀습니다. 이 논란은 진정으로 무작위적이고 예측할 수없는 난수를 생성하는 것이 왜 그렇게 중요한지를 보여줍니다.

"진정한"난수를 생성하기 위해 난수 생성기는 주변의 물리적 세계에서 "엔트로피"또는 겉보기에 임의의 데이터를 수집합니다. 하지 않는 임의의 숫자를 들어 정말 무작위해야, 그들은 단지 알고리즘과 시드 값을 사용할 수있다.

이미지 크레딧 : Flickr의 rekre89, Flickr의 Lisa Brewster, Flickr의 Ryan Somma, Flickr의 huangjiahui