엔트로피(컴퓨팅)
Entropy (computing)컴퓨팅에서 엔트로피는 운영 체제나 애플리케이션이 무작위 데이터를 필요로 하는 암호나 기타 용도에 사용하기 위해 수집하는 무작위성을 말한다. 이러한 무작위성은 종종 마우스 이동과 같은 기존 소스 또는 특별히 제공되는 무작위 생성기와 같은 하드웨어 소스(팬 노이즈 또는 HDD의 분산)에서 수집된다. 엔트로피의 부족은 성능과 보안에 부정적인 영향을 미칠 수 있다.
리눅스 커널
리눅스 커널은 키보드 타이밍, 마우스 이동, IDE 타이밍에서 엔트로피를 생성하며, 특수 파일 /dev/random 및 /dev/urandom을 통해 랜덤 문자 데이터를 다른 운영 체제 프로세스에 사용할 수 있게 한다. 이 기능은 리눅스 버전 1.3.30에 도입되었다.[1]
리눅스 커널 패치가 있어 엔트로피 소스를 더 많이 사용할 수 있다.[2] 페도라 등 일부 운영 체제에 포함된 오디오_entropyd 프로젝트는 오디오 데이터를 엔트로피 소스로 사용할 수 있게 한다.[3] 또한 비디오 소스의 무작위 데이터를 계산하는 video_entropyd와 이 세 가지를 포함하며, 엔트로피 데이터를 이들 중 어느 것도 실행할 수 없는 시스템(예: 가상 머신)에 배포하는 데 사용할 수 있다. 게다가, 풀 엔트로피를 풀링하기 위해 헤지 알고리즘을 사용할 수 있다.[4] 일부 시스템에서는 네트워크 인터럽트를 엔트로피 소스로도 사용할 수 있다.[5]
오픈BSD 커널
OpenBSD는 암호화를 주요 목표 중 하나로 통합했으며 암호화를 위한 엔트로피를 늘리기 위해 노력해왔으며, 또한 커널의 다양한 내부 작동을 포함하여 OS의 많은 부분을 랜덤화하는 데도 힘써왔다. 2011년경에는 평균 시스템에서 초당 수백 메가바이트의 고품질 무작위 데이터를 생산할 수 있어 무작위 장치 2개를 떨어뜨려 단일 소스로 연결했다. 이것은 처음에 충분한 엔트로피가 수집된 후에 OpenBSD에서 사용자랜드 프로그램에 의한 무작위 데이터의 고갈을 불가능하게 만들었다.
허드 커널
리눅스 커널에서 포팅된 드라이버가 허드 커널에 사용 가능하게 되었다.[6]
솔라리스
/dev/random 및 /dev/urandom은 Solaris 2.6 이후 Solaris용 Sun 패키지 또는 패치로 제공되었으며 Solaris 9 이후 표준 기능이었다.[7][8] Solaris 10을 기준으로 관리자는 커널 레벨 암호 프레임워크를 통해 기존 엔트로피 소스를 제거하거나 새로운 엔트로피 소스를 정의할 수 있다.
Solaris 2.4 이전 버전의 /dev/random을 구현하는 타사 커널 모듈도 사용할 수 있다.[7]
OS/2
소프트웨어 프로세스가 랜덤 데이터를 검색할 수 있는 OS/2용 소프트웨어 패키지가 있다.[9]
창문들
Windows 95보다 최신 버전의 Microsoft Windows(윈도우)에서 CryptoA 사용리눅스 커널의 /dev/랜덤과 유사한 방식으로 엔트로피를 수집하는 PI.[10]
윈도즈 크립토API는 이진 레지스트리 키 HKEY_LOCAL_Machine\Software\Microsoft\Cryptography\를 사용한다.모든 엔트로피 소스의 시드 값을 저장하기 위해 RNG\Seed.[11]
왜냐하면 CryptoA가PI는 폐쇄형 소스로서, Windows 플랫폼에서 실행되는 일부 무료 오픈 소스 소프트웨어 애플리케이션은 무작위성을 얻기 위해 다른 방법을 사용한다. 예를 들어 GnuPG는 버전 1.06을 기준으로 메모리 내 여유 바이트 수와 같은 다양한 소스를 사용하여 임의 시드와 결합하면 필요한 임의성이 생성된다.[12]
CAPI를 사용하는 프로그래머는 제대로 초기화한 후 CAPI의 CryptGenRandom()으로 전화하면 엔트로피를 얻을 수 있다.[13]
CryptoAPI는 Windows Vista 이상에서 더 이상 사용되지 않았다. 새로운 API는 Cryptography API: Next Generation(CNG)이라고 불린다.[14] 윈도우즈의 CNG는 이진 레지스트리 키 HKEY_LOCAL_Machine\SYSTEM\RNG\Seed를 사용하여 시드 값을 저장한다.
새로운 버전의 Windows는 다양한 엔트로피 소스를 사용할 수 있다.
- 마더보드에서 사용 가능하고 활성화된 경우 TPM
- UEFI 인터페이스의 엔트로피(UEFI에서 부팅되는 경우)[15]
- 사용 가능한 경우 RDRAND CPU 명령
- 하드웨어 시스템 시계(RTC)
- OEM0 ACPI 테이블 내용
- 인터럽트 타이밍
- 키보드 타이밍 및 마우스 이동[16]
임베디드 시스템즈
![]() | 이 섹션은 독자들에게 혼란스럽거나 불명확할 수 있다. (2016년 1월) (이 과 시기 |
임베디드 시스템은 부팅 시간이 짧은 매우 단순한 장치인 경우가 많으므로 충분한 엔트로피를 수집하는 데 어려움을 겪으며, 충분한 엔트로피를 필요로 하는 키 생성 작업은 종종 시스템이 할 수 있는 첫 번째 작업 중 하나이다. 일반적인 엔트로피 소스는 이러한 장치에 존재하지 않거나 부팅하는 동안 충분한 엔트로피가 존재하는지 확인할 수 있을 만큼 충분히 오랫동안 활성화되지 않았을 수 있다. 임베디드 장치는 회전식 디스크 드라이브, 휴먼 인터페이스 장치, 심지어 팬까지 부족한 경우가 많으며, 네트워크 인터페이스가 있다면 엔트로피를 많이 제공할 만큼 오랫동안 활성화되지 않았을 것이다. 엔트로피에 쉽게 접근할 수 없는 일부 장치는 하드 코딩된 키를 사용하여 무작위 생성기를 시드하거나 기기의 MAC 주소와 같이 쉽게 식별되는 고유 식별자에서 무작위 생성기를 시드할 수 있다. 간단한 연구는[which?] 동일한 키를 사용하는 라우터와 같은 많은 내장형 시스템을 발견함으로써 약한 키의 광범위한 사용을 증명했다. 단순하고 종종 공격자가 결정 가능한 일회성 고유 식별자를 이들 시스템 중 일부의 엔트로피에 통합하지 않았다면 발견된 취약 키의 수는 훨씬 더 많을 것이라고 생각되었다.[17]
중앙집권화된 시스템
True Random Number Generator(TRNG)는 중앙 서비스일 수 있다. 무작위 번호를 획득할 수 있는 중앙집중식 시스템의 한 예는 국립표준기술연구소의 무작위 비콘 서비스다. Cardano 플랫폼은 그들의 분산된 시험인증 프로토콜의 참가자들을 이용하여 무작위 번호를 생성한다.[18]
기타 시스템
사용자 공간 프로세스를 사용하여 임의의 문자를 수집할 수 있는 소프트웨어 패키지가 있으며, EGD, Entropy 수집 데몬과 같은 /dev/random이 정확히 하는 일이 있다.[19]
하드웨어 기반 엔트로피
현대의 CPU와 하드웨어는 종종 운영 체제에 고품질과 고속 엔트로피를 제공할 수 있는 통합 발전기를 특징으로 한다. 리눅스 커널 기반의 시스템에서는 /dev/hw_random을 통해 그러한 장치에서 생성된 엔트로피를 읽을 수 있다.[20] 단, /dev/hw_random이 느릴 수 있다.[21][22]
엔트로피 발전 장치를 제조하는 회사도 있고, 그 중 일부는 리눅스용 드라이버와 함께 출하된다.[23]
Linux 시스템에서는 RDRAND 명령, Trusted Platform Modules 및 일부 Intel, AMD 또는 VIA 칩셋을 지원하는 CPU에서 발견된 True Rand 번호 생성기(TRNG)를 지원하는 rng-tools 패키지를 설치하면 /dev/random으로 수집된 엔트로피를 효과적으로 증가시키고 잠재적으로 암호 잠재력을 향상시킬 수 있다.[24] 이것은 엔트로피의 다른 원천이 없는 머리 없는 시스템에서 특히 유용하다.
실제적 함의
시스템 관리자, 특히 인터넷 서버를 감독하는 사람들은 엔트로피 고갈로 인해 서버 프로세스가 중단되지 않도록 해야 한다. 리눅스 커널을 사용하는 서버의 엔트로피 또는 콘솔과 스토리지 서브시스템에서 엔트로피를 생성하는 다른 커널 또는 사용자 공간 프로세스는 마우스와 키보드가 부족하기 때문에 종종 이상적이지 않기 때문에 서버는 IDE 타이밍과 같은 제한된 리소스 집합에서 엔트로피를 생성해야 한다.
리눅스의 엔트로피 풀 크기는 /proc/sys/커널/랜덤/entropy_avail 파일을 통해 볼 수 있으며 일반적으로 최소 2000비트(최대 4096개)여야 한다.[25][26] 엔트로피는 자주 변한다.
엔트로피가 낮거나 0인 시스템을 담당하는 관리자는 /dev/urandom의 대체품으로 /dev/urandom을 사용하려 해서는 안 된다. 이로 인해 SSL/TLS 연결이 더 낮은 등급의 암호화를 가질 수 있기 때문이다.[27]
일부 소프트웨어 시스템은 Diffie-Hellman 키를 자주 변경하며, 이는 엔트로피 병목현상이 발생하더라도 서버가 정상적으로 작동하도록 도울 수 있다.[28]
엔트로피가 낮은 서버에서는 임의의 문자가 /dev/random(리눅스 기반 시스템)에 나타나기를 기다릴 때 프로세스가 걸려 있는 것으로 나타날 수 있다. 예를 들어, 데비안에는 이것 때문에 exim4가 걸려 있는 것으로 알려진 문제가 있었다.[29]
보안
엔트로피 소스는 키보드 타이밍 공격에 사용될 수 있다.[30]
엔트로피는 서버의 암호법(TLS/SSL)에 영향을 미칠 수 있다: 서버가 적절한 임의성 소스를 사용하지 못하면 서버에서 생성된 키가 불안정해진다. 크래커(악성 공격자)가 유사수 생성기(PRNG)의 출력에서 엔트로피의 일부 비트를 추측할 수 있는 경우도 있으며, 이는 충분한 엔트로피가 PRNG에 유입되지 않을 때 발생한다.[31]
잠재적 출처
일반적으로 사용되는 엔트로피 소스는 마우스, 키보드, IDE 타이밍을 포함하지만 다른 잠재적 소스가 있다. 예를 들어 컴퓨터의 마이크에서 엔트로피를 수집하거나, 디스크 드라이브 내부의 난기류를 측정하기 위한 센서를 구축하여 엔트로피를 수집할 수 있다.[32]
Unix/BSD 파생 모델의 경우 ARM Cortex CPU를 사용하여 시스템의 두 엔트로피 제너레이터 소스에서 생성된 비트 스트림을 필터링/보존하는 USB 기반 솔루션이 존재한다.[33]
CloudFlare는 80개의 용암 램프로 구성된 랙의 이미지 피드를 엔트로피의 추가 소스로 사용한다.[34]
참고 항목
참조
- ^ 임의(4) - Linux man 페이지(die.net)
- ^ 로봇 경향 » 엔트로피 누락
- ^ Fedora 패키지 데이터베이스 - 오디오-엔트로피드[영구적 데드링크]
- ^ "haveged - A simple entropy daemon". Retrieved 3 April 2011.
- ^ Entropy 및 Random Devices LinuxLink by TimeSys - Embedded Linux 리소스
- ^ /dev/{,u}GNU/Hurd용 드라이버(ibofobi.dk)
- ^ a b 에뮬레이션을 통한 Solaris /dev/랜덤
- ^ "Solaris /dev/random". Archived from the original on 2008-05-11. Retrieved 2007-10-17.
- ^ OS/2용 Rexx Entropy 수집 데몬
- ^ Windows용 GPL 명령줄 영구 삭제 대체
- ^ CryptoAPI가 설치된 윈도우즈 플랫폼의 엔트로피 소스
- ^ Windows GnuPG가 키젠에서 임의의 숫자를 생성하는 방법은?
- ^ http://www.cs.berkeley.edu/~http://www.cs.berkeley.edu//rnd/cryptoapi-rand http://archives.seul.org/or/cvs/Mar-2004/msg00078.html
- ^ [1]
- ^ "UEFI entropy gathering protocol - Windows drivers".
- ^ "CryptGenRandom function (Wincrypt.h) - Win32 apps".
- ^ Constantin, Lucian. "Millions of embedded devices use the same hard-coded SSH and TLS private keys". Network World. Retrieved 2018-11-05.
- ^ "A solution for scalable randomness". iohk.io. June 6, 2017. Retrieved September 14, 2020.
- ^ 보안 프로그램 HowTO - 임의 번호
- ^ 'Re: SSL/TLS 엔트로피 문제' - MARC
- ^ Re: /dev/hw_random
- ^ Re: /dev/hw_random
- ^ http://www.std.com/~boardhold/changenoose.http://random.com.hr/products/random/hg324.html 2008-05-13 Wayback Machine에 보관
- ^ [2]
- ^ Re: [exim] STARTLS에 대한 회신 없음
- ^ 임의(4) Linux man 페이지, die.net
- ^ SSL/TLS 엔트로피 문제, a.k.a. pops 시간 초과(as: sasl ldap 문제)
- ^ Josefsson, Simon; [TLS] Re: Short Ephermal Diffie-Hellman 키(ietf.org 메일링 목록)
- ^ [gnutls-dev] gnutls_nutls_params_init이 매달려 있다. 하루에 한 번 rsa-params 재생이 너무 빈번한가?, lists.gnupg.org
- ^ Jalewski, Michal; Unix Entropy 소스를 키 스트로크 타이밍 공격에 사용할 수 있음, 2003
- ^ Re: 엔트로피 고갈(was: SSL/TLS 패시브 스니핑) 웨이백 머신에 2011-05-17 보관, 2005
- ^ 암호화된 방식으로 안전한 서버/클라이언트 프로토콜 4.8.3을 구축하십시오. 엔트로피 수집
- ^ http://www.entropykey.co.uk 2010년 7월 22일 웨이백 머신에 보관
- ^ 랜덤성 101: 생산 중인 LambaRand