IT/Linux

Linux kernel 엔트로피(Entropy)에 대한 이해와 관리

엔지니어 문 2023. 9. 1. 23:26

엔트로피(Entropy) in Linux

엔트로피(Entropy)는 시스템의 무작위성과 불확실성의 정도를 측정하는 개념이다. 무작위로 생성된 바이트에 의존하는 보안 애플리케이션의 난수 생성 코드는 엔트로피(Entropy) 값을 확인하는 것이 중요하다. 엔트로피(Entropy)가 높은 시스템에서 생성된 난수가 당연히 예측 가능성이 낮아 더 안전한 비밀번호를 생성할 수 있기 때문이다.

Linux에서 /dev/random/dev/urandom는 임의의 바이트 시퀀스를 제공하는 특수 장치 파일이다. 시스템은 엔트로피가 충분하지 않으면 /dev/random를 차단된다. 엔트로피(Entropy)가 고갈되면 SSL/TLS이상 등 여러 가지 문제를 만들 수 있기 때문이다.

 

엔트로피(Entropy)를 확인하는 방법

$ cat /proc/sys/kernel/random/entropy_avail

수치가 100-200 미만의 값으로 떨어진다면 문제가 있는 것이다.

 

Linux Server 운영은 어떻게

리눅스 시스템에서 암호화 및 보안 기능을 위해 난수를 생성하는 데 사용되는 엔트로피(Entropy)는 잘 관리되어야 한다. 충분한 양을 보장하는 것은 시스템 보안에 정말 중요하다. 아래는 사용 가능한 엔트로피를 확인하고 특정 임계값(예: 100) 아래로 떨어지면 경고를 표시하는 간단한 스크립트이다.

#!/bin/bash

# Set the minimum entropy threshold
threshold=100

# Get the current entropy level
entropy=$(cat /proc/sys/kernel/random/entropy_avail)

# Check if entropy is below the threshold
if [ "$entropy" -lt "$threshold" ]; then
    echo "Warning: Available entropy is low ($entropy). You may have a problem."
else
    echo "Entropy is sufficient ($entropy)."
fi

 

엔트로피(Entropy)를 늘리는 방법들

 엔트로피(Entropy)는 시스템의 랜덤성 및 보안을 보장하는 중요한 요소 중 하나이며, 그 값을 인위적으로 늘리는 것은 일반적으로 권장되지 않는다. 인위적으로 높이는 것은 시스템의 보안을 약화시킬 수 있으며, 특히 암호화 및 보안 기능에 부정적인 영향을 미칠 수 있다. 리눅스 시스템은 엔트로피(Entropy)를 수집하기 위해 여러 하드웨어 및 소프트웨어 소스를 사용한다. 하드웨어 소스로는 마우스 움직임, 키보드 입력, 디스크 활동 및 하드웨어 이벤트 등이 포함된다. 소프트웨어 소스로는 네트워크 데이터 및 시스템 활동과 같은 다양한 소스가 있다. 만약 시스템에서 엔트로피가 부족한 것으로 판단되면 다음과 같은 방법을 고려할 수 있다

  1. 하드웨어 엔트로피 소스 추가: 추가적인 하드웨어 엔트로피 소스를 시스템에 연결하여 엔트로피를 늘릴 수 있다. 이러한 하드웨어로는 하드웨어 난수 생성기(Hardware Random Number Generator, HRNG)가 있으며, 이것들은 무작위 데이터를 생성하는 데 사용된다.
  2. 소프트웨어 엔트로피 소스 추가: 리눅스 커널은 /dev/random 및 /dev/urandom 디바이스를 통해 엔트로피를 수집한다. 여러 프로그램이 시스템에 무작위 데이터를 공급하면 엔트로피가 더 많이 생성된다. 예를 들어, haveged와 같은 소프트웨어 엔트로피 생성기를 설치하여 엔트로피를 증가시킬 수 있다.
  3. 하드웨어 엔트로피 소스 활성화: 시스템 BIOS 또는 UEFI 설정에서 하드웨어 엔트로피 소스가 활성화한다.

 

소프트웨어를 통한 엔트로피 늘리는 방법

Populating the Entropy Pool Using rngd 사용하기

  • rngd는 입력 장치에서 난수 시퀀스를 가져와 커널 엔트로피 풀에 공급하는 Linux 명령 도구이다.

rngd 설치

$ sudo apt-get update -qq
$ sudo apt-get install -y rng-tools
$ rngd --version

rngd 구동

  • rngd 명령을 사용하여 시스템의 엔트로피 풀을 채우려면 rngd를 실행하기만 하면 된다.
$ sudo rngd
  • 기본적으로 rngd 명령은 하드웨어 난수 생성기 장치 파일(예: /dev/hwrng 및 /dev/hwrandom)에서 임의의 바이트를 공급받는다. 시스템에 하드웨어 난수 생성기가 없는 경우 rngd 명령에 오류 메시지가 표시된다.
$ sudo rngd
read error

read error
  • rngd가 읽어야 하는 난수의 소스를 변경하려면 -r 옵션 뒤에 장치 경로를 지정할 수 있다.
  • /dev/urandom경로로 수정한다.
$ sudo rngd -r /dev/urandom
  • 이제 하드웨어 난수 생성기 대신 /dev/urandom 에서 생성한 난수를 사용하여 엔트로피 풀에 난수를 공급한다.

 

참고링크