/dev/random에서 랜덤값 읽기 문제

leilei의 이미지

굉장히 빈번하게 랜덤값이 필요한 데몬이 있는데요...
그동안 C 표준함수로 사용하다가 /dev/random을 사용해 볼까 했는데..

문제는 키보드나 마우스가 없는 idc내의 서버라 그런지
랜덤값이 너무 천천히 발생한다는 점입니다..

joinc에서는 조용한 시스템이라고 표현을 하셨네요.... :)
먼가 다른 방법으로 앤트로피 풀을 채울 수 있는 방법이 없을까요?

cdpark의 이미지

/dev/random에서 얻은 값을 seed로 해서 C 함수인 random()을 이용하는 건 어떨까요?

eungkyu의 이미지

/dev/random은 원래 런덤적 성향이 강한 대신 바로바로 안나오는 수도 있다고 하네요. /dev/urandom은 랜덤적 성향이 조금 덜하지만 바로바로 값이 나온다고 합니다.

프로그램 짤 때는 cdpark님이 말한 대로 하는 것이 제일 좋은 방법인 듯 합니다 :)

ironiris의 이미지

방금전에 사용한 랜덤값을 seed 로 이용하는 것은 어떨런지요?

발로차는새의 이미지

http://www.kernel.org/pub/linux/kernel/people/rml/netdev-random/README-netdev-random

테스트 PC에서 동작시켜 봤는데 잘 동작 합니다 8)

yundream의 이미지

/dev/random은 앤트로피 풀에 있는 노이즈를 이용해서 랜덤값을 만들어 냅니다.
노이즈는 하드디스크, 마우스, 키보드와 같은 장치에서 발생하는 값인데,
만약 이들에게 입출력이 발생하지 않는다면 앤트로피 풀을 충분히 채우지 못하게
되고 오랜 시간동안 랜덤값을 리턴하지 않는 경우가 생길 수 있습니다.

그래서 최초 암호화 통신을 할 때 사용될 key값을 정의하는 등의 단회성이 강한
부분에 사용하고
지속적으로 랜덤값을 만들어야 하는경우에는 적당한방법이 아닙니다.

커널 2.6에서는 (문서상) /dev/random의 성능이 좋아 졌다고 해서 테스트 해봤는데
이 문제는 여전하더군요..

이런 이유로 지속적으로 랜덤값을 생성해야 하는 경우 random()을 약간 응용한
함수를 만들어서 사용하고 있습니다.

random()버젼
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Code_C_random_read2

/dev/random 버젼
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Code_C_random_read

디스크 입출력을 강제로 발생시키는 루틴을 이용해서 -.-; 엔트로피 풀을 채우는
방법도 있겠지만 기분이 꿀꿀하죠 ?

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.