
랜덤 기능의 문제로 인해 역사상 다양한 브랜드의 지갑 사용자가 코인을 분실한 사례가 많이 있었습니다.
임의성은 특히 암호화 전자 화폐인 비트코인에 매우 중요합니다. 커뮤니티 내에서 랜덤성에 대한 논의가 많지 않아 정확한 이해가 부족한 분들이 많아 오늘은 랜덤성에 대해 이야기 해보도록 하겠습니다.
임의성에 관해서는 "TRNG(True Random Number Generator)"와 PRNG(Pseudo-Random Number Generator)라는 두 가지 개념을 명확히 해야 합니다.
컴퓨터 프로그램 및 언어의 대부분의 임의 함수는 의사 난수 생성기이며 모두 "시드"(예: "시간")를 사용하여 특정 알고리즘에 의해 "무작위로 보이는" 결과를 생성합니다.
알고리즘과 시드, 또는 이전에 생성된 난수를 아는 사람이라면 다음 난수 시퀀스의 정보를 얻을 수 있다는 것은 의심의 여지가 없습니다. 예측 가능성으로 인해 암호학적으로 안전하지 않으므로 "의사 무작위"라고 합니다. 이런 종류의 난수는 게임의 악당이 도망가는 데 큰 문제가 아니며 Bitcoin 개인 키를 생성하는 데 사용되면 너무 안전하지 않습니다.
진정한 난수 생성기에 대해 이야기합시다.중국 위키에서는 "하드웨어 난수 생성기"(HRNG)를 진정한 난수 생성기와 동일시하는 것이 그리 정확하지 않습니다.엄격한 의미에서 진정한 난수는 양자 역학에만 존재할 수 있습니다. 그중에서 우리가 현재 원하는(또는 원할 수 있는) 것은 이러한 임의성이 아닙니다.
우리는 실제로 예측 불가능하고 통계적이며 암호학적으로 안전한 난수를 원합니다. 이를 수행할 수 있는 난수 생성기가 진정한 난수 생성기라고 할 수 있는 한. 이러한 종류의 진정한 임의성은 반드시 특별히 설계된 하드웨어일 필요는 없습니다.리눅스 운영 체제의 커널에 있는 난수 생성기(/dev/random)는 엔트로피 풀(하드웨어 노이즈 수집, 예: 키보드, 마우스 작동, 네트워크 신호 강도 변화 등), 가능한 가장 큰 임의 데이터 엔트로피를 제공할 수 있으므로 고품질의 진정한 난수 생성기이기도 합니다.
그러나 /dev/random이 차단됩니다. 즉, 엔트로피 풀이 비어 있으면 충분한 주변 소음이 수집될 때까지 /dev/random에 대한 읽기 작업이 일시 중단됩니다.
따라서 프로그램을 개발할 때 /dev/urandom을 /dev/random의 복사본으로 사용해야 하며 차단되지는 않지만 출력 엔트로피는 /dev/random보다 작을 수 있습니다.
알겠습니다. 비트코인 애플리케이션을 개발할 때 개인 키를 생성하기 위해 어떤 종류의 난수 생성기를 사용해야 합니까?
답은 간단합니다. 항상 urandom 만 사용하십시오.
"매우 안전하다"고 주장하는 임의 기능을 제공하는 일부 고급 보안 라이브러리를 포함하여 타사 난수 솔루션을 사용하지 마십시오. 그들은 모두 사용자 모드의 암호화 난수 생성기이고 urandom은 커널 모드의 난수 생성기이기 때문에 커널은 원시 장치의 엔트로피에 액세스할 수 있으며 커널은 응용 프로그램 간에 동일한 상태를 공유하지 않도록 할 수 있습니다. .
역사적으로 무수한 난수 실패 사례는 대부분 사용자 상태의 난수 생성기에서 발생했으며 사용자 상태의 난수 생성기는 거의 항상 커널 상태의 난수 생성기에 의존합니다(의존하지 않는 경우, 그러면 위험이 더 커집니다), 일부 개발 작업을 단순화할 수 있다는 점을 제외하면 추가 이점은 전혀 없지만 타사 코드의 도입으로 인해 발생할 수 있는 잠재적인 보안 위험이 증가합니다.
따라서 개발자는 암호학적으로 안전한 난수가 필요할 때 urandom을 사용해야 합니다.
마지막으로 일부 어린이들이 BITHD 하드웨어 지갑이 실제 난수를 생성합니까?
대답은 다음과 같습니다. 물론입니다.
BITHD의 칩에는 하드웨어 난수 생성기가 있어 물리적 노이즈 소스를 획득하여 진정한 난수를 생성합니다.