/dev/random À» ÀÌ¿ëÇÑ ·£´ý°ª »ý¼º
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : docbook>random



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
HTML º¯È¯¹®¼­

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> 
<article lang="ko"> 
 
<!--           --> 
<!-- ¹®¼­ Á¤º¸ --> 
<!--           --> 
<articleinfo> 
    <title>/dev/random À» ÀÌ¿ëÇÑ ·£´ý°ª »ý¼º</title> 
 
    <author> 
        <surname>À± »ó¹è</surname> 
 
        <affiliation> 
            <address> 
                <email>dreamyun@yahoo.co.kr</email> 
            </address> 
        </affiliation> 
    </author> 
    <revhistory> 
        <revision> 
            <revnumber>1.0</revnumber> 
            <date>2004³â 1¿ù 28ÀÏ 19½Ã</date> 
            <revremark>/dev/random ÀåÄ¡ ³ëÀÌÁî ¼öÁý ¹®Á¦Á¡</revremark> 
        </revision> 
        <revision> 
            <revnumber>0.9</revnumber> 
            <date>2003³â 2¿ù 24ÀÏ 22½Ã</date> 
            <revremark>¼Ö¶ó¸®½º¿¡¼­ /dev/random ¹®ÀÚÀåÄ¡»ý¼º</revremark> 
        </revision> 
        <revision> 
            <revnumber>0.8</revnumber> 
            <date>2003³â 2¿ù 9ÀÏ 21½Ã</date> 
            <revremark>¹®¼­ ÀÛ¼º</revremark> 
        </revision> 
    </revhistory> 
</articleinfo> 
 
 
<!--                                                                 --> 
<!-- ¼½¼Ç ½ÃÀÛ                                                       --> 
<!--                                                                 --> 
<section> 
    <title>¼Ò°³</title> 
    <para> 
        À̹ø±ÛÀº ¸®´ª½º ½Ã½ºÅÛ¿¡¼­ Á¦°øÇÏ´Â ¹®ÀÚÀåÄ¡(character devices)¸¦  
        ÀÌ¿ëÇÑ ·£´ý°ªÀ» ¾ò¾î³»´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ´ã°í ÀÖ´Ù.  
        Linux kernel 2.4.x ȯ°æ¿¡¼­¸¸ Å×½ºÆ®µÇ¾úÀ¸³ª, Kernel 2.2.x ¿¡¼­µµ  
        µ¿ÀÏÇÏ°Ô ÀÛµ¿µÉ°ÍÀ¸·Î »ý°¢µÈ´Ù.  
        Solaris ÀÇ °æ¿ì 2.8 ¹öÀüÀÌÈÄ·Î ÆÐÄ¡¸¦ ÅëÇØ¼­ /dev/random À»  
        Áö¿øÇϴ°ɷΠµÇ¾îÀÖ´Ù. ´Ù¸¥ Unix µéµµ ´ëºÎºÐ Áö¿øÇÏÁö¸¸  
        ¹öÁ¯¿¡ µû¶ó¼­ Áö¿ø¿©ºÎ°¡ °áÁ¤µÉ°ÍÀÌ´Ù.   
    </para> 
</section> 
<section> 
    <title>RANDOM °ª ¸¸µé±â</title> 
    <section> 
        <title>¿Ö RANDOM°ªÀÌ Áß¿äÇѰ¡</title> 
        <para> 
            random ÀÇ Àǹ̰¡ "ÀÓÀÇÀÇ", "ÀÏÁ¤Ä¡ ¾Ê´Â"ÀÇ ¶æÀ» °¡Áø´Ù´Â  
            °ÍÀº ´©±¸µçÁö ¾Ë°í ÀÖÀ»°ÍÀÌ´Ù. °¡Àå °£´ÜÇÑ ·£´ý°ªÀÇ ¿¹´Â  
            ÁÖ»çÀ§°¡ ´øÁ®Áú°æ¿ì ³ª¿À´Â ´«ÀÇ ¼ö °¡ µÉ°ÍÀ̸ç,  
            ´øÁö´Â »ç¶÷ÀÌ ¾Æ¹« »ý°¢¾øÀÌ ´øÁú°æ¿ì "ÀÓÀÇÀÇ" °ªÀÌ ³ª¿À°Ô  
            µÉ°ÍÀÌ´Ù.  
        </para> 
        <para> 
            ÀÌ "ÀÓÀÇÀÇ" °ªÀº ÀÏ»ó»ýȰ¿¡¼­ ÀÚÁÖ »ç¿ëµÇ¸ç, ƯÈ÷ "º¸¾È"À»  
            ÇÊ¿ä·Î Çϴ°÷¿¡¼­ ´õ¿í Áß¿äÇÏ°Ô ´Ù·ç¾îÁø´Ù.  
            ±Ý°íÀÇ ¹®À» ¿­±â À§ÇÑ 6ÀÚ¸®ÀÇ ¼ýÀÚ¸¦ Á¶ÇÕÇÑ´Ù°í  
            ÇßÀ»¶§, Ä«µå¿¡¼­ Çö±Ý¼­ºñ½ºµîÀ» ¼­ºñ½º¹Þ±â À§ÇØ »ç¿ëÇÏ´Â  
            4ÀÚ¸® ¼ýÀÚÀÇ Á¶ÇÕµî "ÀÓÀÌÀÇ" °ªÀÌ »ç¿ëµÇ¾î¾ß ÇÒ°ÍÀÌ´Ù.  
            ÈçÈ÷ ÀÌ·¯ÇÑ ¼ýÀÚÁ¶ÇÕÀ» ¸¸µé¶§ °¡Àå ¹®Á¦½Ã µÇ´Â°Ô, "ÀÓÀÇÀÇ" °ªÀ»  
            »ç¿ëÇÏÁö ¾Ê°í ¼ýÀÚÁ¶ÇÕÀ» ¸¸µç´Ù´Â Á¡ÀÌ´Ù. Àڱ⠻ýÀÏÀ̶óµçÁö,  
            ¾Æ´Â »ç¶÷ÀÇ ÀüÈ­¹øÈ£µîÀÌ ´ëÇ¥ÀûÀÎ ¿¹·Î, ÀÌ·± °ªµéÀº  
            "ÀÓÀÇÀÇ"°ªÀÌ ¾Æ´Ï´Ù. ÀÓÀÇÀÇ °ªÀÌ ¾Æ´Ï¶õ ¶æÀº À¯Ãß°¡ °¡´ÉÇÔÀ»  
            ¶æÇϸç, À¯Ãß°¡ °¡´ÉÇÏ´Ù´Â °ÍÀº ±×¸¸Å­ ÇêÁ¡ÀÌ ¸¹¾ÆÁú¼ö  
            ÀÖÀ½À» ¶æÇÑ´Ù.   
        </para> 
        <para> 
            ÄÄÇ»ÆÃ ȯ°æ¿¡¼­µµ ÀÌ·¯ÇÑ "ÀÓÀÇÀÇ"°ª À» ¼±ÅÃÇÒ¼ö ÀÖ¾î¾ß ÇÑ´Ù.  
            ¼±ÅÃµÈ ÀÓÀÇÀÇ °ªÀº ¿©·¯°¡Áö ¿ëµµ·Î »ç¿ëµÉ°ÍÀε¥, ´ëÇ¥ÀûÀ¸·Î  
            »ç¿ëÇÒ¼ö ÀÖ´Â°Ô »ç¿ëÀÚ È®ÀÎÀ» À§ÇÑ "password" ¿Í  
            SSL °ú °°Àº ¶óÀ̺귯¸®µî¿¡¼­ ¾Ïȣȭ¹× º¹È£È­¸¦ À§ÇÑ key°ªµîÀÇ  
            Á¦ÀÛÀÏ °ÍÀÌ´Ù.   
        </para> 
        <para> 
            ÀÌ·¯ÇÑ "ÀÓÀÇÀÇ"°ªµéÀº ´ç¿¬ÇÏÁö¸¸ ÃÖ´ëÇÑ "ÀÓÀÇÀÇ"°ªÀ¸·Î½á,  
            °¡´ÉÇÑ À¯Ãߵɼö ¾ø´Â °ªÀÌ µÇ¾î¾ß ÇÒ°ÍÀÌ´Ù.  
            ¸¸¾à ¿ì¸®°¡ "ÀÓÀÇÀÇ"°ª À» ¾ò±â À§ÇÑ ¾î¶² ÇÔ¼ö¸¦ ¸¸µé¾ú°í,  
            ÀÌ ÇÔ¼ö¸¦ ÅëÇØ¼­ 1-9999 »çÀÌÀÇ ÀÓÀÇÀÇ °ªÀ» ¾ò¾î³»·Á°í Çϴµ¥,  
            ÇÔ¼ö¸¦ »ç¿ëÇß´õ´Ï 5000 - 6000 »çÀÌÀÇ °ªÀÌ ´Ù¸¥ °ªº¸´Ù  
            Ưº°È÷ ¸¹ÀÌ ³ª¿Â´Ù¸é, ÀÌ ÇÔ¼ö´Â ¹ÏÀ»¼ö ¾ø´Â "°áÇÔÀÌ ÀÖ´Â"  
            ÇÔ¼ö°¡ µÉ°ÍÀ̸ç, ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â ¸¹Àº ÇÁ·Î±×·¥Àº   
            º¸¾È °áÇÔÀ» °¡Áö°Ô µÉ°ÍÀÌ´Ù. ÀÌ»óÀûÀ¸·Î °¢°¢ÀÇ °ªÀÌ ¼±ÅÃµÉ È®·üÀº  
            ¸ðµÎ µ¿ÀÏ(1/°ªÀǹüÀ§)ÇØ¾ß ÇÒ°ÍÀÌ´Ù-´Ù¸¥¸»·Î Ç¥ÁØÆíÂ÷ 0-.   
        </para> 
    </section> 
    <section> 
        <title>Ç¥ÁØ C random ÇÔ¼ö</title> 
        <para> 
            Ç¥ÁØ C ¿¡¼­´Â ·£´ý°ªÀÇ °è»êÀ» À§Çؼ­ random()¿Í srandom() µÎ°³ÀÇ  
            ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù.   
            <screen> 
#include <stdlib.h> 
 
long random(void); 
void srandom(unsigned int seed); 
            </screen> 
            srandom ÇÔ¼ö´Â random seed °ªÀ» ¸¸µé±â À§Çؼ­ »ç¿ëµÇ¸ç,  
            random Àº ¸¸µé¾îÁø random seed °ªÀ» ÀÌ¿ëÇØ¼­  
            ÀÏ·ÃÀÇ ·£´ý°ªÀ» ¹ß»ý½ÃŲ´Ù. ÀÌ ¸»Àº randomÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­  
            ¹ß»ýµÇ´Â ·£´ý°ªÀº srandom ¿¡ ÀÇÁ¸ÀûÀÓÀ» ¶æÇϸç, ½ÇÁ¦ °°Àº  
            random seed ¸¦ ÀÌ¿ëÇØ¼­ random ÇÔ¼ö¸¦ µ¹¸±°æ¿ì  
            ¾ðÁ¦³ª µ¿ÀÏÇÑ ÀÏ·ÃÀÇ ·£´ý°ªÀ» ¾ò°Ô µÈ´Ù.       
        </para> 
        <para> 
            srandom ¿¡¼­ÀÇ random seed ´Â ¾Æ±Ô¸ÕÆ®·Î ÁÖ¾îÁö´Â  
            <emphasis>seed</emphasis>¿¡ ÀÇÇØ¼­ »ý¼ºµÈ´Ù.  
        </para> 
        <para> 
            random ÇÔ¼ö°¡ srandom ¿¡¼­ ¸¸µé¾î³»´Â random seed ¿¡ ÀÇÇØ¼­  
            ·£´ý°ªÀ» ¸¸µé¾î³½´Ù´Â °ÍÀº ±×¸® ÁÁÁö ¾ÊÀº ¾ÆÀ̵ð¾î¶ó°í »ý°¢µÈ´Ù.  
            ¿Ö³ÄÇϸé seed ¿¡ ÀÓÀÇÀÇ int °ªÀ» ÇÒ´çÇÑ´Ù´Â°Ô »ý°¢Ã³·³ ½¬¿î°Ô  
            ¾Æ´Ï±â ¶§¹®À̸ç(º¸ÅëÀº ÄÄÇ»ÅÍÀÇ ½Ã°£°ªÀ» »ç¿ëÇÑ´Ù), ÀÌ·¯ÇÑ  
            °ªÀº À¯Ãߵɼö Àֱ⠶§¹®ÀÌ´Ù. ±âº»ÀûÀ¸·Î µ¿ÀÏÇÑ seed °ªÀ»  
            ÀÌ¿ëÇÒ°æ¿ì µ¿ÀÏÇÑ ÀÏ·ÃÀÇ ·£´ý°ªÀ» ¾òÀ»¼ö Àֱ⠶§¹®ÀÌ´Ù.  
        </para> 
        <para> 
            ¶ÇÇÑ random À¸·Î »ý¼ºµÇ´Â ·£´ý°ªÀÇ ¹üÀ§´Â  
            16*((2**31)-1) ÀÌ´Ù. ¾ð¶æº¸¸é ¸Å¿ì Å«¼ýÀÚÀÎ°Í °°´Ù.  
            ±×·¯³ª ÃÖ±Ù ssl µî¿¡¼­ key ÀÇ Å©±â°¡ 128bit ÀΰÍÀ» °¨¾ÈÇÏ¸é  
            ³Ê¹« ÀÛÀº ¹üÀ§ÀÇ ·£´ý°ª¸¸À» ¾ò¾î¿Ã¼ö À־, ÇöÀç ÄÄÇ»ÆÃ ȯ°æÀÌ  
            ¿ä±¸ÇÏ´Â ¼öÁØ¿¡ Å©°Ô ¹Ì´ÞµÇ°í ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù.     
        </para> 
        <para> 
            Áï ±×¸® º¹ÀâÇϰųª Áß¿äÇÏÁö ¾ÊÀº ¾îÇø®ÄÉÀ̼ǿ¡¼­ÀÇ  
            ·£´ý°ªÀ» ¸¸µé±â À§Çؼ­´Â °£´ÜÇÏ°Ô »ç¿ë°¡´ÉÇÏÁö¸¸, ±×·¸Áö ¾ÊÀº  
            ½ÇÁ¦ ¼­ºñ½ºÈ¯°æ¿¡¼­ »ç¿ëÇϱ⿡´Â ºÎÁ·ÇÑÁ¡ÀÌ ÀÖ´Ù.   
        </para> 
        <section>     
            <title>¼º´É Å×½ºÆ®</title>  
            <para> 
                ÀÏ´Ü random seed ¸¦ Á¦¿ÜÇÏ°í »ý°¢ÇÑ´Ù¸é,  
                ·£´ý°ªÀº Á¤¸» ·£´ýÇÏ°Ô ³ª¿Í¾ß ÇÑ´Ù.  
                ¿¹¸¦µé¾î 1-100 ±îÁöÀÇ ¹üÀ§¿¡¼­ ·£´ý°ªÀ» ÃßÃâÇϰíÀÚ ÇßÀ»¶§  
                À̰ÍÀ» 100000¹ø µ¹¸®¸é 1-100 »çÀÌÀÇ °¢°¢ÀÇ °ªÀÌ  
                °ÅÀÇ ºñ½ÁÇÑ È½¼ö·Î ¼±ÅõǾîÁ®¾ß ÇÒ°ÍÀÌ´Ù. ¾à°£´õ  
                ¸¹ÀÌ ¼±Åõǰųª ±×·¸Áö ¾ÊÀº  
                ·£´ý°ªÀÌ ÀÖ°ÚÁö¸¸ ´ëÃæ 1000 Á¤µµ¿¡¼­ ¼±ÅõǾîÁ®¾ß ÇÒ°ÍÀ̸ç,  
                ÀÌ ¿ÀÂ÷ ÆøÀÌ ÀÛÀ»¼ö·Ï ¼º´ÉÀÌ ÁÁÀº ·£´ý ÇÔ¼ö¶ó°í ÇÒ¼ö ÀÖ´Ù.  
            </para> 
            <para> 
                º¸Åë ÀÌ·¯ÇÑ Åë°è¼öÄ¡¿¡¼­ °¢°¢ÀÇ °üÃø°ªÀÌ Æò±Õ¿¡¼­  
                ¶³¾îÁø Á¤º¸¸¦ °¡Áö°í ¾ó¸¶³ª ¹Ù¶÷Á÷ÇÏ°Ô ºÐÆ÷µÇ¾î ÀÖ´ÂÁö¸¦  
                ÆÇ´ÜÇÏ°Ô µÇ´Âµ¥, À̸¦ Ç¥ÁØÆíÂ÷¶ó°í ÇÑ´Ù.  
                ¿©±â¿¡¼­´Â random ÇÔ¼öÀÇ ¼º´ÉÀ» ¾Ë¾Æº¸±â À§Çؼ­ Ç¥ÁØÆíÂ÷¸¦  
                ±¸Çϰí À̸¦ ±×·¡ÇÁ·Î È®ÀÎÇØº¸µµ·Ï ÇϰڴÙ(Åë°è °è»ê°ªÀº  
                ¼ýÀÚº¸´Ù´Â ¾Æ¹«·¡µµ ±×¸²ÀÌ ÀÌÇØÇϱⰡ ½±´Ù).   
            </para> 
            <para> 
                ÀÌ·¯ÇÑ Ç¥ÁØÆíÂ÷¸¦ ±¸Çϱâ À§Çؼ­ °£´ÜÇÑ Å×½ºÆ®¿ë Äڵ带  
                ¸¸µé°ÍÀÌ´Ù. ÀÌ ÄÚµå´Â srandom À» ÀÌ¿ëÇØ¼­ random seed ¸¦  
                ¸¸µé°í, ÀÌ random seed ¸¦ ÅëÇØ¼­ random À» 100000¹ø  
                µ¹¸®°Ô µÉ°ÍÀÌ´Ù. ·£´ý°ªÀÇ ¹üÀ§´Â 1¿¡¼­ 100 »çÀ̰¡ µÉ°ÍÀ̸ç,  
                °¢ °üÃø°ªÀÌ ¸î¹ø¾¿ Ãâ·ÂµÇ´ÂÁö¸¦ È®ÀÎÇϰí, À̰ÍÀ»  
                ÀÌ¿ëÇØ¼­ Ç¥ÁØÆíÂ÷¸¦ ±¸Çϰí, ±×·¡ÇÁ¸¦ ¸¸µé°ÍÀÌ´Ù.  
                Âü°í·Î Ç¥ÁØÆíÂ÷¸¦ ±¸ÇÏ´Â ÀϹÝÀûÀÎ °ø½ÄÀº ´ÙÀ½°ú °°´Ù.      
                <figure> 
                    <title>Ç¥ÁØÆíÂ÷ °ø½Ä</title> 
                    <graphic fileref="http://www.joinc.co.kr/albums/album01/abs.gif"> 
                </figure> 
            </para> 
            <para> 
                ´ÙÀ½Àº Å×½ºÆ®¸¦ À§ÇÑ ÄÚµåÀÌ´Ù.  
            </para> 
            <para> 
                <emphasis>¿¹Á¦ : random_test.c</emphasis> 
                <screen> 
#include <stdlib.h> 
#include <string.h> 
#include <stdio.h> 
#include <math.h> 
 
struct mdata 
{ 
    int count; 
}; 
 
int main() 
{ 
    int i = 0; 
    struct mdata mydata[101]; 
 
    int sum = 0; 
    int avg = 0; 
    int dosu = 0; 
    int dosu_p = 0; 
 
    memset((void *)&mydata, 0x00, sizeof(struct mdata)*101); 
    // srandom(100); 
 
    // 100000¹øµ¿¾È 0-99 »çÀÌÀÇ ·£´ý°ªÀ» ¾ò¾î¿Â´Ù.  
    // ¾ò¾î¿Â ·£´ý°ªÀº counting µÈ´Ù.  
    while( i < 100000) 
    { 
        mydata[random()%100].count++; 
        i++; 
    }  
 
    i = 0; 
 
    // Ä«¿îÆÃµÈ ·£´ý°ªÀ» ÀÌ¿ëÇØ¼­  
    // Æò±Õ,ÇÕ,Ç¥ÁØÆíÂ÷¸¦ ±¸Çس½´Ù.  
    while (i < 100)  
    { 
        sum += mydata[i].count;  
        printf("%d %d\n", i, mydata[i].count); 
        i++; 
    } 
    avg = sum/100;   
    printf("Æò±Õ : %d\n", avg); 
    printf("ÇÕ   : %d\n", sum); 
     
    sum = 0; 
    i = 0; 
    while (i < 100) 
    { 
        sum += (mydata[i].count - avg)*(mydata[i].count - avg); 
        i++; 
    } 
    // sqrt(sum/100) À» Çϸé Ç¥ÁØÆíÂ÷°¡  
    // ³ª¿Â´Ù.   
    printf("%d\n", sum/100); 
} 
                </screen> 
                À§ÀÇ ½ÇÇà°á°ú¸¦ º¸¸é Ç¥ÁØÆíÂ÷´Â ´ë·« 36 Á¤µµ°¡ ³ª¿Â´Ù.  
                À̸»Àº Æò±Õ°ªÀÎ 1000 ¿¡¼­ ´ë·« 36Á¤µµÀÇ ¹üÀ§³»¿¡ ¸ðµç  
                °üÃø°ªÀÌ À§Ä¡ÇÔÀ» ¶æÇÑ´Ù.  
                ±¦ÂúÀº ¼º´ÉÀ» º¸¿©ÁØ´Ù´Â°É ¾Ë¼ö ÀÖ´Ù.  
                ¾Æ·¡´Â ½ÇÇà°á°úÀÌ´Ù.   
                <screen> 
96 1012 
97 992 
98 970 
99 1008 
Æò±Õ : 1000 
ÇÕ   : 100000 
1303 
                </screen> 
                ¸¶Áö¸· Ãâ·Â°ªÀÎ 1303 ¿¡ sqrt ¿¬»êÀ» ÇØÁÖ¸é Ç¥ÁØÆíÂ÷¸¦ ±¸ÇÒ¼ö  
                ÀÖ´Ù.  
            </para> 
            <para> 
                ´ÙÀ½Àº À§ÀÇ Äڵ带 µ¹·Á¼­ ³ª¿Â °á°ú¸¦  
                ±×·¡ÇÁ·Î ³ªÅ¸³½°ÍÀε¥, Æò±Õ°ªÀÎ 1000 ºÎ±Ù¿¡ ´ëºÎºÐ À§Ä¡Ç졒  
                ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù.  
                ÀÌ ±×·¡ÇÁ´Â gnuplot ¸¦ ÀÌ¿ëÇØ¼­ ¸¸µé¾îÁ³´Ù.       
                <figure> 
                    <title>random ¼º´ÉÅ×½ºÆ® °á°ú</title> 
                    <graphic fileref="http://www.joinc.co.kr/albums/album01/abr.gif"> 
                </figure> 
                random.dat ´Â srandom ÇÔ¼ö¸¦ »ç¿ëÇÏÁö ¾ÊÀº »óÅ¿¡¼­  
                ±âº» random seed ¸¦ ÀÌ¿ëÇØ¼­ ¸¸µé¾îÁø °ªÀ̸ç,  
                random2.dat ´Â srandom À» 100 À¸·Î ÇÑ´ÙÀ½¿¡ ¸¸µé¾îÁø  
                °ªÀÌ´Ù.    
            </para> 
        </section> 
    </section> 
    <section id="prob"> 
        <title>/dev/random ÀÇ ÀÌ¿ë</title> 
        <para> 
            Unix ¿¡¼­´Â Á»´õ ¹ü¿ëÀûÀ¸·Î »ç¿ëÇÒ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù.  
            /dev/random À̶ó´Â ¹®ÀÚÀåÄ¡¸¦ ÅëÇÑ ·£´ý°ª°¡Á®¿À±â°¡ ÀÌ ¹æ¹ýÀÌ´Ù.   
        </para> 
        <para> 
            ÀÌ ¹®ÀÚÀåÄ¡´Â Ä¿³Î¿¡¼­ Á¦°øÇϴµ¥, int ÇüÀÇ °ªÀ» ÀÌ¿ëÇØ¼­ random seed ¸¦  
            »ý¼ºÇس»´Â random ÇÔ¼ö ¿Í´Â ´Þ¸® ´Ù¸¥ ÀåÄ¡µå¶óÀ̹ö¿Í ¿£Æ®·ÎÇÇÇ®¾ÈÀÇ ´Ù¸¥ ¼Ò½º 
            µé·Î ºÎÅÍ ³ëÀÌÁ ¸ðÀ¸°í ÀÌ·¯ÇÑ ³ëÀÌÁî¿Í ÀåÄ¡µå¶óÀ̹ö¿¡ °É¸®´Â ÀÎÅÍ·´Æ®½Ã°£  
            °£°ÝµîÀ» ÀÌ¿ëÇØ¼­ ³­¼ö¸¦ »ý¼º½ÃŲ´Ù.   
        </para> 
        <para> 
            °£´ÜÈ÷ »ý°¢Çؼ­ Űº¸µå, ¸¶¿ì½º, µð½ºÅ© ȤÀº ³»ºÎÀûÀ¸·Î ¹ß»ýµÇ´Â ´Ù¸¥  
            ÀÎÅÍ·´Æ®µîÀ» ÀÌ¿ëÇØ¼­ ³­¼ö¸¦ ¹ß»ý½ÃŲ´Ù°í º¸¸é µÈ´Ù.  
            À̵é ÀÎÅÍ·´Æ® °ªµîÀº ¿¹ÃøÇϱⰡ ¸Å¿ì Èûµé±â ¶§¹®¿¡ ±Ùº»ÀûÀ¸·Î random ÇÔ¼ö¸¦  
            ÀÌ¿ëÇϴ°ͺ¸´Ù ¸Å¿ì ¾ÈÀüÇÏ°Ô ·£´ý°ªÀ» »ý¼ºÇÒ¼ö°¡ ÀÖ´Ù. ¶ÇÇÑ  
            ³­¼öÀÇ ¹üÀ§¸¦ ¸Å¿ì Å©°Ô ÀâÀ»¼ö Àֱ⠶§¹®¿¡, 128bit Å©±â¸¦ ±âº»À¸·Î »ç¿ëÇÏ´Â  
            Áö±ÝÀÇ ÄÄÇ»ÆÃ ȯ°æ¿¡ À¯¿ëÇÏ°Ô »ç¿ëÇÒ¼ö ÀÖ´Ù    
        </para> 
        <para> 
            ½ÇÁ¦ openssl °ú °°Àº ¶óÀ̺귯¸®µîÀº ¾ÏȣȭµÈ keyÀÇ »ý¼ºÀ» À§Çؼ­ /dev/random  
            À» »ç¿ëÇÑ´Ù.   
            ´ÙÀ½Àº 128bit Å©±âÀÇ ³­¼ö¸¦ »ý¼ºÇÏ´Â °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ´Ù.  
        </para> 
        <para> 
            <emphasis>¿¹Á¦ : dev_mem.c</emphasis> 
            <screen> 
#include <unistd.h> 
#include <fcntl.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
 
int main() 
{ 
    int i, fd; 
    char key[16]; 
    if ((fd = open("/dev/random", O_RDONLY)) == -1) 
    { 
        perror("open error"); 
        exit(1); 
    } 
    if ((read(fd, key, 16)) == -1) 
    { 
        perror("read error"); 
        exit(1); 
    } 
 
    for (i = 0; i < 16; i++) 
    { 
        printf("%c", key[i]); 
    } 
} 
            </screen> 
            À§ÀÇ ÄÚµå´Â 16 * 8(128)bit Å©±â¸¦ °¡Áö´Â ·£´ý°ªÀ» ¸¸µé¾î³½´Ù.  
            À§ÇÁ·Î±×·¥À» ½ÇÇà½ÃŲ °á°ú°ªÀ» È®ÀÎÇϱâ ÁÁ°Ô ¸¸µé±â À§Çؼ­ mimecode ¸¦  
            ÅëÇØ¼­ ¾Æ·¡¿Í °°ÀÌ Ãâ·ÂÇØº¸¾Ò´Ù.  
            <screen> 
[root@localhost c_source]# ./dev_mem | mimencode  
6qK3AlTHc0nUUETnoL5LRA== 
            </screen> 
            mimencode ´Â ÀԷ°ªÀ» base64 ÀÎÄÚµùÇØ¼­ ±× °á°ú¸¦ Ãâ·ÂÇϸç,  
            º¸Åë MIME ¸Þ½ÃÁö¸¦ ÷ºÎÇϱâ À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëµÇ´Â ¾îÇø®ÄÉÀ̼ÇÀÌ´Ù. 
        </para> 
        <para> 
            ÄÚµå´Â ¸Å¿ì °£´ÜÇϸç, ½ÇÇà½Ã¸¶´Ù ¼­·Î ´Ù¸¥ ·£´ý°ªÀÌ Ãâ·ÂµÇ´Â°É  
            È®ÀÎÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù. ¶ÇÇÑ ·£´ý°ªÀÇ Å©±â Á¦ÇÑ¿ª½Ã ¸Å¿ì ÀÚÀ¯·Ó´Ù.  
            À§ÀÇ key ¹è¿­ÀÇ Å©±â¸¦ 32 ·Î ÇÑ´Ù¸é °£´ÜÇÏ°Ô 256bit Å©±â¸¦ °¡Áö´Â  
            ÇÔ¼ö¸¦ »ý¼ºÇÒ¼ö ÀÖ´Ù. 
        </para> 
        <section> 
            <title>Á¶¿ëÇÑ ½Ã½ºÅÛ¿¡¼­ÀÇ /dev/random ¹®Á¦Á¡</title> 
            <para> 
                /dev/randomÀ» »ç¿ëÇϴµ¥ À־ »ç¼ÒÇÑ(¶§¿¡ µû¶ó¼­´Â ½É°¢ÇÑ)  
                ¹®Á¦°¡ Çϳª Àִµ¥, ÀåÄ¡ÀÇ ³ëÀÌÁ ¼öÁýÇØ¼­ ¾ØÆ®·ÎÇÇ Ç®¿¡  
                ÀúÀåÇϰí ÀÌ °ªÀ» ÀÌ¿ëÇØ¼­ ·£´ý°ªÀ»  
                ¸¸µé¾î ³½´Ù´Â Ư¡ ¶§¹®¿¡ ÀåÄ¡¿¡ ³ëÀÌÁî°¡ ¾øÀ» ¶§´Â  
                ¾ØÆ®·ÎÇÇ Ç®ÀÌ ºñ¾î ¹ö¸®°í, ¶§¹®¿¡    
                ¸Å¿ì ¿À·£ ½Ã°£µ¿¾È ·£´ý°ªÀÌ ¹ß»ýÇÏÁö ¾ÊÀ» ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. 
            </para> 
            <para> 
                ´ÙÀ½ÀÇ Äڵ带 Å×½ºÆ® ÇØº¸±â ¹Ù¶õ´Ù.      
                <screen> 
#include <time.h> 
#include <stdio.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <fcntl.h> 
 
#define MAX_RND_SIZE 32  
 
int random_init() 
{ 
    int fd; 
    fd = open("/dev/random", O_RDONLY); 
    return fd; 
} 
 
int random_get(int fd, void *buf, size_t size) 
{ 
    int i = 0; 
    int n = 0; 
 
    // ÁÖ¼® 1.  
    while( n < size) 
    { 
        n += read(fd, buf, size - n); 
    } 
    return n; 
} 
 
int random_clear(int fd) 
{ 
    close(fd); 
} 
int main() 
{ 
    int fd; 
    int n; 
    unsigned int value; 
 
    fd = random_init(); 
    sleep(5); 
    while(1) 
    { 
        n = random_get(fd, (void *)&value, 4); 
        printf("%d %lu\n", n, value); 
    } 
    random_clear(fd); 
} 
                </screen> 
                ´ç½ÅÀÇ ½Ã½ºÅÛÀÌ Á¶¿ëÇÑ »óŶó°í °¡Á¤ÇÑ´Ù¸é  
                óÀ½ ¸î °³´Â ¹ß»ýÇÏÁö¸¸ ±× ÈÄ¿¡´Â ¶ç¾ö¶ç¾ö ¹ß»ý ÇÏ´Â °ÍÀ»  
                È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÚ ÀÌÁ¦ Űº¸µå¸¦ ´­·¯ º¸°Å³ª.  
                ¸¶¿ì½º¸¦ ¿òÁ÷¿© º¸°Å³ª º¹»ç¿Í °°Àº ÆÄÀÏ °ü·Ã ÀÛ¾÷À»  
                ÇØº¸±â ¹Ù¶õ´Ù.  ¾Æ¸¶ ·£´ý°ªÀÌ ºü¸£°Ô ¹ß»ýÇÏ´Â °É  
                È®ÀÎ ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.  
            </para> 
            <para> 
                ÀÌ·¯ÇÑ /dev/randomÀÇ Æ¯Â¡ ¶§¹®¿¡ ¿¬¼ÓÇØ¼­ ·£´ýÇÑ °ªÀ» ¾ò°íÀÚ  
                ÇÒ ¶§ ¹®Á¦°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸´Ï ÀÌ·² °æ¿ì »ç¿ë¿¡ ÁÖÀÇÇØ¾ß  
                ÇÑ´Ù.(¹°·Ð ±×¸® ÈçÇÑ °æ¿ì°¡ ¾Æ´Ï±ä ÇÏÁö¸¸)    
            </para> 
            <para> 
                ¸¸¾à ÀÐ¾î µéÀÌ·Á´Â Å©±â¸¸Å­ÀÇ ³ëÀÌÁî°¡ ¾ØÆ®·ÎÇÇ Ç®¿¡ ÀÖÁö  
                ¾ÊÀ» °æ¿ì ¿äûÇÑ Å©±âº¸´Ù ´õ ÀûÀº °ªÀ» ÀÐ¾î ¿Ã ¼öµµ ÀÖÀ¸¹Ç·Î  
                ªÀº ½Ã°£¿¡ ¿©·¯°³ÀÇ ·£´ý°ªÀ» »ý¼ºÇØ¾ß ÇÒ °æ¿ì     
                <emphasis>ÁÖ¼® 1.</emphasis>¿¡¼­ ó·³ »çÀÌÁ °è»êÇØÁà¾ß ÇÒ  
                Çʿ伺ÀÌ ÀÖ´Ù.   
            </para> 
            <para> 
                ªÀº ½Ã°£¿¡ ¿©·¯°³ÀÇ ·£´ý°ª »ý¼ºÀº ÀÎÁõ°ª°ú °°Àº Áß¿äÇÑ  
                ºÎºÐ¿¡ »ç¿ëµÈ´Ù°í º¸±â´Â Èûµé´Ù. ÀÌ·± °æ¿ì¿¡´Â ±×³É random()À»  
                ÀÌ¿ëÇϵµ·Ï ÇÏÀÚ.   
            </para> 
            <para> 
                Ä¿³Î 2.6¿¡¼­´Â /dev/random¿¡ Çâ»óÀÌ ÀÖ´Ù°í ÇÏ´Ï  
                Çѹø È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ.  
            </para> 
        </section> 
        <section> 
            <title>Áö¿ø OS Á¦ÇÑ</title> 
            <para> 
                /dev/random ¹®ÀÚÀåÄ¡¸¦ ÀÌ¿ëÇØ¼­ ·£´ý°ªÀ» ¾ò¾î¿À´Â ¹æ¹ýÀº  
                ¸Å¿ì È¿À²ÀûÀ̱ä ÇÏÁö¸¸, ¸ðµç OS°¡ ÀÌ ¹®ÀÚÀåÄ¡¸¦ Áö¿øÇÏ´Â°Ç  
                ¾Æ´Ï´Ù. ÇÊÀÚ°¡ ¾Æ´Â ¹Ù·Î´Â Linux ÀÇ °æ¿ì 2.x ÀÌ»óÀÇ Ä¿³Î¿¡¼­  
                Áö¿øÇϸç Sun os ÀÇ °æ¿ì 5.8 À̻󿡼­¸¸ Áö¿øÇÏ´Â °É·Î ¾Ë°í ÀÖ´Ù.  
                Sun os 5.8 Àǰæ¿ì¿¡´Â ÆÐÄ¡¸¦ ÅëÇØ¼­ Áö¿øÇÑ´Ù.   
            </para> 
            <para> 
                ±×·³À¸·Î /dev/random À» ÀÌ¿ëÇÑ ¾îÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇϰíÀÚ ÇÒ¶§´Â  
                ¹èÆ÷ÇÏ´Â OS¿¡ ´ëÇØ¼­ ½Å°æÀ» ½áÁà¾ß ÇÑ´Ù.  
            </para> 
            <section> 
                <title>Sun OS ¿¡¼­ÀÇ /dev/random »ý¼º</title> 
                <para> 
                    SunÀÇ °æ¿ì /dev/random À» »ý¼ºÇϱâ À§ÇÑ °£´ÜÇÑ ¹æ¹ýÀÌ ÀÖ´Ù.  
                    egd ¶ó´Â Perl ¸ðµâÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ýÀε¥,   
                    ¹æ¹ýÀε¥ <ulink url="http://www.sunfreeware.com">sunfreeware</ulink> ³ª  
                    <ulink url="http://www.cpan.org">cpan.org</ulink> ¿¡¼­ ¾òÀ»¼ö ÀÖ´Ù.  
                    °³ÀÎÀûÀ¸·Î sunfreeware ¿¡¼­ ¹öÁ¯¿¡ ¸Â´Â egd ¸¦ ¼³Ä¡ÇÏ´Â°É ÃßõÇÑ´Ù.   
                </para> 
                <para> 
                    sunfreeware ¿¡ °¡º¸¸é °¢ ¹öÁ¯º°·Î egd ¸ðµâÀÌ Á¸ÀçÇÒ°ÍÀÌ´Ù.  
                    Àû´çÇÑ egd ¸¦ ´Ù¿î¹Þ¾Æ¼­ ¼³Ä¡ÇÏ¸é µÇ´Âµ¥, ÆÐŰÁö°¡ ¾Æ´Ñ ½î¾²¸¦  
                    ´Ù¿î¹Þ¾Æ¼­ Á÷Á¢ ¼³Ä¡Çϵµ·Ï ÇÑ´Ù.  
                    egd-0.x.tar.gz ¸¦ ´Ù¿î¹Þ¾Æ¼­ ¾ÐÃàÀ» Ǭ´ÙÀ½¿¡  
                    ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î ÄÄÆÄÀÏÈÄ ¼³Ä¡Çϵµ·Ï ÇÑ´Ù.  
                    <screen> 
[root@localhost egd]# perl Makefile.PL  
... 
[root@localhost egd]# make  
... 
[root@localhost egd]# make install 
... 
                    </screen> 
                    ¼º°øÀûÀ¸·Î ÄÄÆÄÀÏÀ» ¸¶ÃÆ´Ù¸é egd.pl À̶ó´Â ÆÞ ½ºÅ©¸³Æ®°¡  
                    ¸¸µé¾îÁö°í ÀÌ°É ÀÌ¿ëÇØ¼­ /dev/random À» »ý¼ºÇÒ¼ö ÀÖ´Ù.   
                    <screen> 
[root@locaohost egd]# egd.pl /dev/random 
... 
                    </screen> 
                    egd.pl À» ½ÇÇà½Ã۸é /dev/random ÀÌ ¸¸µé¾îÁö´Âµ¥ ls ·Î È®ÀÎÇØ º¸¸é  
                    ¹®ÀÚÀåÄ¡ ÆÄÀÏÀÌ ¾Æ´Ñ Unix Domain ¼ÒÄÏÆÄÀÏÀÓÀ» ¾Ë¼ö ÀÖ´Ù.  
                    ±×·³À¸·Î ¿ì¸®°¡ ·£´ý°ªÀ» ¾ò¾î¿À±â À§Çؼ­´Â Á÷Á¢ ¼ÒÄÏ¿¡ ¿¬°áÇØ¼­  
                    /dev/random ¼ÒÄÏÆÄÀÏ·Î ºÎÅÍ °ªÀ» ¾ò¾î¿Í¾ß ÇÑ´Ù.  
                    egd.pl Àº perl ·ÎµÈ Unix Domain ¼ÒÄÏ ¼­¹öÀÌ´Ù.   
                </para> 
                <para> 
                    ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» ÅëÇØ¼­ ·£´ý°ªÀ» ¾ò¾î¿Ã¼ö ÀÖ´Ù.  
                    <screen>     
#include <unistd.h> 
#include <fcntl.h> 
#include <sys/stat.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <sys/un.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
 
int main() 
{ 
    int sockfd; 
    int clilen; 
    int value; 
    char de[36]; 
    struct sockaddr_un clientaddr; 
 
    sockfd = socket(AF_UNIX, SOCK_STREAM, 0); 
    if (sockfd < 0) 
    { 
        perror("exit : "); 
        exit(0); 
    } 
 
    clientaddr.sun_family = AF_UNIX; 
    strcpy(clientaddr.sun_path, "/dev/random"); 
    clilen = sizeof(clientaddr); 
    if (connect(sockfd, (struct sockaddr *)&clientaddr, clilen) < 0) 
    { 
        perror("connect error : "); 
        exit(0); 
    } 
    printf("OK READ\n"); 
 
    while(1) 
    { 
        memset(de, 0x01, 4); 
        write(sockfd, de, 4); 
        read(sockfd, (void *)&value, sizeof(int)); 
        printf("%d\n", value); 
        sleep(1); 
    } 
 
    close(sockfd); 
    exit(0); 
} 
                    </screen>     
                </para> 
                <para> 
                    Âü°í·Î edg.pl Àº SHA(Secure Hash algorithm)À» »ç¿ëÇÑ´Ù.  
                    MD5 °è¿­ÀÇ Hash ÇÔ¼ö¿Í ¸Å¿ì À¯»çÇÏ°Ô ÀÛµ¿Çϸç, SHS(secure hash standard) 
                    ¿¡ Á¤ÀǵǾî ÀÖ´Ù. MD5 º¸´Ù ´Ù¼Ò ´À¸®Áö¸¸ ´õ ¾ÈÀüÇÏ´Ù´Â Æò°¡¸¦  
                    ¹Þ°í ÀÖ´Ù.   
                </para> 
            </section> 
        </section> 
    </section> 
</section> 
<section> 
    <title>°á·Ð</title> 
    <para> 
        À̻󰣴ÜÇÏ°Ô ·£´ý°ªÀ» ¾ò¾î¿À´Â 2°¡Áö ÀϹÝÀûÀÎ ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸¾Ò´Ù.   
        /dev/random ÀÇ °æ¿ì ³ªÁß¿¡ ´Ù·ç°ÔµÉ ssl ÇÁ·Î±×·¡¹Ö¿¡¼­µµ ¾²ÀÓÀ¸·Î  
        ¾Ë¾Æ ³õÀ¸¸é ¾ðÁ¨°¡ À¯¿ëÇÏ°Ô ½á¸ÔÀ»¼ö ÀÖÀ»°ÍÀÌ´Ù.   
    </para> 
</section> 
</article> 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.