¡åAdvertisement
right event
¡åAdvertisement
  ³×Æ®¿öÅ© ÀÀ¿ë °³¹ßÀÚ¸¦ À§ÇÑ º¸¾ÈÇÁ·Î±×·¡¹Ö 2003-10-07 03:10:05  
  Á¶È¸ : 2474  
È«±âÈÆ | ÃÖÀç´ö | , ±è´ö¿ì |
ÇÊÀÚµéÀº ¼þ½Ç´ëÇб³ ´ëÇпø Åë½Å¸Á º¸¾È ¿¬±¸½Ç¿¡¼­ ¸ÖƼ¹Ìµð¾î ±â¹ÝÀÇ º¸¾È ÇÁ·ÎÅäÄÝÀ» ¿¬±¸Çϰí ÀÖ´Ù. ƯÈ÷ VoIP º¸¾È ±â¼ú¿¡ °üÇÏ¿© ¿¬±¸Çϰí Àִµ¥ H.323À» À§ÇÑ H.235¿Í SIPÀ» À§ÇÑ SIP º¸¾È ÇÁ·ÎÅäÄÝÀ» ±¸ÇöÇϰí ÀÖ´Ù.

ÀÎÅͳÝÀº ÀÌÁ¦ ´Ü¼øÇÑ Á¤º¸ °Ë»öÀ̶õ ±â´É »Ó¸¸ ¾Æ´Ñ ¿ì¸® »ýȰÀÇ ±â¹ÝÀÌ µÇ¾î °¡°í ÀÖ´Ù. ±×·¯³ª ÀÎÅͳÝÀÌ ÀÌ·¸°Ô ÁøÈ­ÇÒ¼ö·Ï °¡Àå ¹®Á¦°¡ µÇ´Â °ÍÀº ¿ª½Ã º¸¾ÈÀÌ´Ù. ¾ó¸¶ Àü ½½·¡¸Ó ¿ú¿¡ ÀÇÇÑ ÀÎÅÍ³Ý ºÒÅë »çŰ¡ ¹ß»ýÇÏ¿´À» ¶§ °¢ ¾÷°è¿¡¼­´Â À̹ø »ç°ÇÀ¸·Î ÀÎÇÑ ¸ÅÃâ °¨¼Ò¿Í ÇÇÇØ¾×À» °ÆÁ¤ÇÏ¿´´Ù. ±×·¯³ª ÀÎÅÍ³Ý ±â¹ÝÀÇ ÀÌ·¯ÇÑ ÇÇÇØ´Â À̹ø°ú °°Àº ´ëÇü »ç°ÇÀÌ ¹ß»ýÇßÀ» ¶§¸¸ ³ªÅ¸³ª´Â °ÍÀº ¾Æ´Ï´Ù. Æò»ó½Ã ¸¹Àº »ç¿ëÀÚµéÀÌ ÀÎÅͳÝÀ» ÅëÇØ ¹°°ÇÀ» ±¸¸ÅÇϰųª ȤÀº ȸ¿ø °¡ÀԽà »ç¿ëÀÚ Á¤º¸¿Í ½Å¿ëÄ«µå ¹øÈ£ µîÀ» ÀÔ·ÂÇϰí ÀÖÀ¸¸ç, ½ÇÁ¦ ±ÝÀüÀûÀÎ °¡Ä¡°¡ ÀÖ´Â Á¤º¸µéÀÌ À̵¿ÇÑ´Ù. ±×·¯³ª ÀÎÅͳÝÀº °ø°³µÈ ³×Æ®¿öÅ©·Î ±× ¾ÈÀü¼ºÀ» º¸ÀåÇÏÁö ¸øÇÏ´Â °áÇÔÀ» °®°í Àֱ⿡ °¢ ÀÀ¿ë ¼­ºñ½ºº° º¸¾È ´ëÃ¥Àº ÇʼöÀûÀÌ´Ù. ÀÌ ±Û¿¡¼­´Â ³×Æ®¿öÅ© ÀÀ¿ë ¼­ºñ½º °³¹ßÀÚµéÀÌ ÀڽŵéÀÇ ÇÁ·Î±×·¥¿¡ ¾ÈÀü¼ºÀ» °­È­Çϱâ À§Çؼ­ ¾î¶² ¹æ¹ýµéÀ» Àû¿ëÇÒ ¼ö ÀÖ´ÂÁö¿¡ ´ëÇØ ¾ð±ÞÇϰíÀÚ ÇÑ´Ù.

¾î¶² ¹æ¹ýÀ¸·Î º¸È£ÇÒ °ÍÀΰ¡
±×·¯¸é °ú¿¬ ¾î¶² ¹æ¹ýÀ¸·Î ³×Æ®¿öÅ©¿¡ Àü¼ÛµÇ´Â µ¥ÀÌÅ͸¦ º¸È£ÇÒ ¼ö ÀÖÀ»±î? ½±°Ô »ý°¢ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀº ¾Ïȣȭ¸¦ ÅëÇÑ µ¥ÀÌÅÍÀÇ º¸È£´Ù. ±×·¯³ª À̰ÍÀº ´Ü¼øÈ÷ ¾ÏÈ£ ¾Ë°í¸®Áò¸¸ °¡Áö°í º¸È£ÇÒ ¼ö ¾ø´Ù. ¾Ïȣȭ¸¦ À§Çؼ­´Â ۰¡ ÇÊ¿äÇÏ°í ¸Þ½ÃÁöÀÇ º¯Á¶¸¦ ¸·±â À§Çؼ­´Â ¶Ç ¸Þ½ÃÁö ÀÎÁõÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ·¯ÇÑ ¿©·¯ °¡Áö º¸¾ÈÀû ±â´ÉÀ» ³×Æ®¿öÅ©¿¡ Àû¿ëÇÏ¿© ¼³°èÇÑ °ÍÀÌ ¹Ù·Î º¸¾È ÇÁ·ÎÅäÄÝÀÌ´Ù.
º¸¾È ÇÁ·ÎÅäÄÝÀÇ ´ëÇ¥ÀûÀÎ ¿¹·Î TLS(Transport Layer Security), IPSec(IP Security) µîÀÌ ÀÖÀ¸¸ç, À̰͵éÀº ÇöÀç º¸¾È Ç¥ÁØ ÇÁ·ÎÅäÄݵéÀÌ´Ù. ±×·¯³ª ÀÌ·¯ÇÑ º¸¾È ÇÁ·ÎÅäÄݵéÀº ¾ÈÀü¼ºÀ» ±â¹ÝÀ¸·Î ¼³°èµÇ¾ú±â ¶§¹®¿¡ ³×Æ®¿öÅ© °³¹ßÀÚµéÀÌ ±¸ÇöÇϱ⿡´Â ¾öû³­ ÀÛ¾÷ÀÌ µÉ ¼ö ÀÖÀ¸¸ç, ¿©·¯ºÐÀÌ ¸¸µå´Â ³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥º¸´Ù ´õ¿í º¹ÀâÇÑ ÇüŰ¡ µÉ ¼ö ÀÖ´Ù. µû¶ó¼­ ÀÌ ±Û¿¡¼­´Â º¸¾È Àü¹®°¡µéÀÌ ÀÛ¼ºÇØ ³õÀº °ø°³ º¸¾È ÇÁ·ÎÅäÄÝÀ» ÀÌ¿ëÇÏ¿© Àû¿ëÇÏ´Â ¹æ¹ý°ú °£´ÜÇÑ º¸¾È ÇÁ·ÎÅäÄÝÀ» ±¸ÇöÇØ º¸´Â µÎ °¡Áö ÀÛ¾÷À» ÇØº¸µµ·Ï ÇϰڴÙ.

±â °³¹ßµÈ º¸¾È ÇÁ·ÎÅäÄÝ »ç¿ë
³×Æ®¿öÅ© º¸¾ÈÀ» À§Çؼ­ º¸¾È ÇÁ·ÎÅäÄÝÀÌ »ç¿ëµÇ´Âµ¥ ÀÌ·¯ÇÑ º¸¾È ÇÁ·ÎÅäÄÝÀº °¢ Ç¥ÁØÈ­ ´Üü¿¡¼­ Ç¥ÁØÀ» Á¤ÇÏ¿© Àü ¼¼°èÀûÀ¸·Î »ç¿ëÇϵµ·Ï Çϰí ÀÖ´Ù. À¥ ¼­ºñ½º¸¦ À§Çؼ­ HTTP ÇÁ·ÎÅäÄÝ, ÀÎÅÍ³Ý ÆùÀ» À§Çؼ­ SIP¿Í H.323 ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇϰí ÀÌ·¯ÇÑ ³×Æ®¿öÅ© ¼­ºñ½º¿¡ º¸¾ÈÀ» Àû¿ëÇϱâ À§ÇØ º¸¾È ÇÁ·ÎÅäÄÝÀÌ »ç¿ëµÈ´Ù. º¸¾È ÇÁ·ÎÅäÄÝÀº Ä¿ºñ·Î½º, IPSec, S/MIME, PGP, SSL/TLS µîÀÌ Àִµ¥ ÀÌ·¯ÇÑ º¸¾È ÇÁ·ÎÅäÄÝÀº ³×Æ®¿öÅ© ½ºÅà »ó¿¡¼­ º¸¸é <±×¸² 1>°ú °°Àº À§Ä¡¸¦ Â÷ÁöÇÏ°Ô µÈ´Ù.
Ä¿ºñ·Î½º´Â °ø°³µÈ ÄÄÇ»ÅÍ ³×Æ®¿öÅ©¿¡¼­ ¼­ºñ½ºÀÇ ¿äûÀ» ÀÎÁõÇϱâ À§ÇÑ ¾ÈÀüÇÑ ¹æ¹ýÀ» Á¦°øÇÏ´Â ÀÎÁõ ÇÁ·ÎÅäÄݷμ­, MIT¿¡¼­ Athena Project·Î °³¹ßµÇ¾úÀ¸¸ç À̸§Àº °í´ë ±×¸®½º ½ÅÈ­¿¡¼­ Çϵ¥½ºÀÇ ¹®À» ÁöŰ´Â ¸Ó¸®°¡ ¼Â ´Þ¸° °³ÀÇ À̸§À» µû¼­ ºÙ¿©Á³´Ù. IPsecÀº IP payload¸¦ ¾ÏȣȭÇÏ¿© º¸È£ÇÏ´Â ÇÁ·ÎÅäÄÝ·Î IP¸¦ »ç¿ëÇÏ´Â ¸ðµç ÀÀ¿ë ÇÁ·Î±×·¥¿¡ Àû¿ëÀÌ °¡´ÉÇÏ´Ù. S/MIMEÀº ÀüÀÚ¸ÞÀÏÀ» À§ÇÑ º¸¾È ÇÁ·ÎÅäÄݷμ­ MIMEÀÌ MIME ÀÚü·Î¼­ ¾î¶°ÇÑ º¸¾È ¼­ºñ½º¸¦ Á¦°øÇÏÁö ¾Ê±â ¶§¹®¿¡ ÀÀ¿ë °èÃþ¿¡¼­ º¸¾ÈÀ» Á¦°øÇÏ´Â ´ëÇ¥ÀûÀÎ ÇÁ·ÎÅäÄÝÀÌ´Ù. S/MIMEÀº ¿ìÆí»Ó¸¸ ¾Æ´Ï¶ó MIME °´Ã¼¸¦ Àü¼ÛÇÏ´Â ¸ðµç ÇÁ·ÎÅäÄÝ¿¡¼­ º¸¾ÈÀ» À§ÇØ »ç¿ë °¡´ÉÇÏ´Ù. PGP´Â ÀüÀÚ¿ìÆí°ú ÆÄÀÏ ÀúÀå ÀÀ¿ë¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ±â¹Ð¼º°ú ÀÎÁõ ¼­ºñ½º¸¦ Á¦°øÇÑ´Ù. ÆÄÀϰú ¸Þ½ÃÁö¸¦ ¾ÏȣȭÇϴ ǥÁØÈ­µÈ ¹æ¹ýÀ» ¼±ÅÃÇØ¼­ »ç¿ëÇϰíÀÚ ÇÏ´Â ±â¾÷À» Æ÷ÇÔÇØ¼­ ÀÎÅͳÝÀ» ÅëÇØ Àü¼¼°èÀûÀ¸·Î ´Ù¸¥ »ç¶÷µé°ú ¾ÈÀüÇÏ°Ô Åë½ÅÇϰíÀÚ ÇÏ´Â °³Àο¡ À̸£±â±îÁö ¸Å¿ì ´Ù¾çÇÑ ¿µ¿ªÀÇ ÀÀ¿ë¼ºÀ» °¡Áø´Ù. SSL/TLSÀº À¥ º¸¾È ÇÁ·ÎÅäÄÝÀÌ´Ù. TLS´Â IETF(Intern et Engineering Task Force)¿¡¼­ Á¦¾ÈµÈ ±¹Á¦ Ç¥ÁØ WWW º¸¾È ÇÁ·ÎÅäÄÝÀ̸ç, SSL ÇÁ·ÎÅäÄÝÀ» ±â¹ÝÀ¸·Î Çϰí ÀÖÀ¸³ª ÇöÀç±îÁö ¾Ë·ÁÁø SSL 3.0 ÇÁ·ÎÅäÄÝÀÇ ¿©·¯ ¹®Á¦Á¡À» °³¼±ÇÏ¿© ¿ì¼öÇÑ ¾ÈÀü¼ºÀ» °®´Â º¸¾È ÇÁ·ÎÅäÄÝÀÌ´Ù. SSL 2.0, SSL 3.0 ±×¸®°í TLS 1.0Àº »óÈ£ ¿¬µ¿ÀÌ °¡´ÉÇϵµ·Ï ±¸¼ºµÇ¾î ÀÖ°í À̵éÀ» ÅëÆ²¾î SSL/TLS ÇÁ·ÎÅäÄÝÀ̶ó ÇÑ´Ù.

°ø°³µÈ º¸¾È ¶óÀ̺귯¸® »ç¿ë
º¸¾È ¶óÀ̺귯¸®´Â °ø°³¿ë°ú »ó¾÷¿ëÀ¸·Î ³ª´©¾î º¼ ¼ö ÀÖ´Ù. °ø°³µÇ¾ú´Ù´Â °ÍÀº ¿©·¯ ¹æ¸é¿¡¼­ ¹ß°ßµÇ´Â º¸¾È Ãë¾àÁ¡¿¡ ´ëÇØ¼­ ±×¸¸Å­ º¸¿ÏÇß´Ù´Â °ÍÀ» ÀǹÌÇϱ⠶§¹®¿¡ °ø°ÝÀÇ ¿©Áö°¡ ÃÖ¼ÒÇÑÀ¸·Î ÁÙ¾îµç´Ù´Â °ÍÀ» ÀǹÌÇϱ⵵ ÇÑ´Ù. ¡®OpenSSL ÇÁ·ÎÁ§Æ®¡¯´Â ´ëÇ¥ÀûÀÎ °ø°³¿ë º¸¾È ¶óÀ̺귯¸® Á¦°ø ´ÜüÀÌ´Ù. OpenSSL¿¡´Â ¿©·¯ ¾ÏÈ£ ¾Ë°í¸®Áò ¹× º¸¾È ÇÁ·ÎÅäÄÝ °ü·Ã ¶óÀ̺귯¸®¸¦ ¹«·á·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. °æÁ¦ÀûÀÎ Ãø¸é¿¡¼­ ¿©·¯ ³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥¿¡ º¸¾ÈÀ» Àû¿ëÇϱâ Èûµç Áß¼Ò±â¾÷µé¿¡°Ô´Â ÀÌ·¯ÇÑ °ø°³¿ë ¶óÀ̺귯¸®ÀÇ »ç¿ëÀº Àϼ®ÀÌÁ¶¶ó ÇÒ ¼ö ÀÖ°Ú´Ù.

¡ß SSL/TLS ¶óÀ̺귯¸®
? Win32 Openssl : www.shininglightpro.com/search.php? searchname=Win 32+OpenSSL
? OpenSSL Project : www.openssl.org

»ó¾÷¿ë ¶óÀ̺귯¸® »ç¿ë
³×Æ®¿öÅ© ÀÀ¿ë °³¹ßÀÚµéÀº »ó¾÷¿ë ¶óÀ̺귯¸®ÀÇ »ç¿ëµµ °í·ÁÇØ º¼ ¼ö ÀÖ´Ù. »ó¾÷¿ë ¶óÀ̺귯¸®´Â °ø°³¿ë ¶óÀ̺귯¸®¿Í´Â ´Þ¸® »ç¿ëÀÌ ½±°í ¶óÀ̺귯¸® Á¦°ø ¾÷ü·ÎºÎÅÍ ¿©·¯ °¡Áö ºÎ°¡ÀûÀÎ Áö¿øÀ» ¹ÞÀ» ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù. ±×·¯³ª »ó¾÷¿ëÀ̱⠶§¹®¿¡ ¶óÀ̼±½º¿¡ µû¸¥ °æÁ¦ÀûÀÎ ºÎ´ãÀÌ Ãß°¡·Î ÇÊ¿äÇϱ⠶§¹®¿¡ µÎ ¶óÀ̺귯¸®ÀÇ Àå/´ÜÁ¡À» Àß °í·ÁÇÏ¿© ¼±ÅÃÇÑ ÈÄ º¸¾ÈÀ» Àû¿ë½ÃÄÑ¾ß ÇÒ °ÍÀÌ´Ù.

ÀÚüÀûÀÎ º¸¾È ´ëÃ¥À» ¸¶·ÃÇÏÀÚ
³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥À» À§ÇÑ ¸¶Áö¸· º¸¾È ¹æ¹ýÀ¸·Î ÀÚüÀûÀÎ º¸¾È ¸ÞÄ¿´ÏÁòÀ» Á¤ÀÇÇϰí À̸¦ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ¹°·Ð º¸¾È¿¡ ´ëÇÑ Àü¹®ÀûÀÎ Áö½Ä ¾øÀÌ º¸¾È¿¡ °üÇÑ ¸ÞÄ¿´ÏÁòÀ» ¼³°èÇϰí Àû¿ëÇÑ´Ù´Â °ÍÀº ÀÏ¹Ý °³¹ßÀڵ鿡°Ô´Â ´Ù¼Ò ºÎ´ãÀÌ µÉ ¼ö ÀÖ´Ù. ±×·¯³ª ±âÁ¸ÀÇ º¸¾È ÇÁ·ÎÅäÄÝ Áß¿¡¼­ ÇÙ½ÉÀÌ µÇ´Â ºÎºÐ¸¸ °£·«È­ÇÏ¿© »ç¿ëÇØµµ ÇϳªÀÇ ³×Æ®¿öÅ© ÀÀ¿ë ¼­ºñ½º¿¡´Â ¼Õ»öÀÌ ¾ø´Â º¸¾È ÇÁ·ÎÅäÄÝÀÌ µÉ ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ¹æ¹ýÀº ¾Õ¿¡¼­ ¼³¸íÇÑ ±â °³¹ßµÈ º¸¾È ÇÁ·ÎÅäÄݺ¸´Ù ¸ðµâÀÇ Å©±â ¸é¿¡¼­ Ä¿´Ù¶õ µµ¿òÀÌ µÉ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿¹¸¦ µé¾î, Ŭ¶óÀÌ¾ðÆ®¿¡¼­ µ¿ÀÛÇÏ´Â ÇÁ·Î±×·¥ÀÌ À¥À» ±â¹ÝÀ¸·Î ¼­¹ö¿¡¼­ Ŭ¶óÀÌ¾ðÆ®·Î ´Ù¿î·ÎµåµÇ¾î ½ÇÇàµÇ´Â °æ¿ì, º¸¾È ¸ðµâÀº º¸È£ ´ë»óÀÎ ³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥º¸´Ù ÀÛ¾Æ¾ß ÇÒ °ÍÀÌ´Ù. ±×·¯³ª º¸¾È ÇÁ·ÎÅäÄÝÀº ¿©·¯ ¾ÏÈ£ ¾Ë°í¸®Áò°ú º¸¾È Çù»ó ¼Ò½º¸¦ Æ÷ÇÔÇϰí Àֱ⠶§¹®¿¡ »ó´çÈ÷ Ä¿´Ù¶õ Äڵ尡 µÇ¸ç ¿ÀÈ÷·Á º¸¾ÈÀ» Àû¿ëÇÒ ³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥º¸´Ù ¸î ¹èÀÇ Å©±â°¡ µÉ ¼öµµ ÀÖ´Ù.
¶Ç ÇÑ °¡Áö ÀåÁ¡Àº º¸¾È ÃʱâÈ­ ½Ã°£À» ÁÙÀÏ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. º¸¾È ÇÁ·ÎÅäÄÝÀº Ű ±³È¯, º¸¾È Çù»ó(Security negotiation) ¹× ÀÎÁõ¼­ ±³È¯ µî ¸¹Àº ÃʱâÈ­ ÀÛ¾÷À» ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ÀÌ·¯ÇÑ ÃʱâÈ­ ½Ã°£Àº °í°´µé¿¡°Ô ¼­ºñ½º Ãʱ⿡ ±â´Ù·Á¾ß ÇÏ´Â ºÒÆíÇÔÀ» ¾ß±âÇϰí, ƯÈ÷ ³×Æ®¿öÅ©°¡ ´À¸®°Å³ª ¼­¹ö°¡ ¸¹Àº ¼¼¼ÇÀ» ó¸®Çϰí ÀÖ´Â °æ¿ì Áö¿¬ ½Ã°£ÀÌ ´õ¿í Áõ°¡ÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÚüÀûÀÎ º¸¾ÈÀ» »ç¿ëÇÏ´Â °æ¿ì, ³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¼­ºñ½º ¿¬°á ¿äûÀ» ÁÖ°í¹Þ´Â µ¿¾È Ű ±³È¯ÀÌ ¼öÇàµÉ ¼ö ÀÖ´Ù. ¹°·Ð ÀÚüÀûÀÎ º¸¾È ´ëÃ¥ÀÇ ¾ÈÀü¼ºÀº ±âÁ¸ÀÇ Ç¥ÁØ º¸¾È ÇÁ·ÎÅäÄÝ¿¡ ºñÇØ ¶³¾îÁö´Â °ÍÀº ´ç¿¬ÇÑ °ÍÀÌ´Ù.

°ø°³ º¸¾È ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÑ Àü¼Û µ¥ÀÌÅÍ º¸È£
OpenSSL ÇÁ·ÎÁ§Æ®´Â SSLeay¿¡¼­ À¯·¡(Eric, A, Young)ÇÑ SSL v2/v3, TLS v1 ÇÁ·ÎÅäÄݰú ¿©·¯ ¾ÏÈ£ ¾Ë°í¸®ÁòÀ» ±¸ÇöÇÑ °ø°³µÈ ¶óÀ̺귯¸®ÀÌ´Ù. SSLeay´Â ¿ø·¡ SSLÀ» ±¸ÇöÇϱâ À§ÇÑ ¸ñÀûÀ¸·Î ¼³°èµÇ¾î ÀϹÝÀûÀÎ ¾Ïȣȭ ±â´É ±¸Çö¿¡´Â Àß ¸ÂÁö ¾Ê´Â °æÇâÀÌ ÀÖ¾úÀ¸³ª OpenSSL ±×·ì¿¡¼­ ²ÙÁØÇÑ ¾÷µ¥ÀÌÆ®¸¦ ÅëÇØ ¸¹Àº ±â´ÉÀÌ Ãß°¡µÇ¾ú´Ù.

°ø°³ ÇÁ·ÎÁ§Æ® ¼Ò°³ ¹× SSL ±â¼ú ¼Ò°³
OpenSSL ÇÁ·ÎÁ§Æ®´Â CA °ü·Ã ÇÁ·Î±×·¥»Ó¸¸ ¾Æ´Ï¶ó S/MIME À¯Æ¿¸®Æ¼ ±â´Éµµ Á¦°øÇϸç Áö¼ÓÀûÀ¸·Î ¾÷µ¥ÀÌÆ®µÇ°í ÀÖ´Ù. ÇöÀç ³ª¿Í ÀÖ´Â ÃֽйöÀüÀº Áö³­ 2002³â 12¿ù¿¡ ¹ßÇ¥µÈ ¹öÀü 0.9.7ÀÌ´Ù. OpenSSL ÇÁ·ÎÁ§Æ®¿¡¼­ Á¦°øµÇ´Â ¾ÏÈ£ ¾Ë°í¸®Áò ¹× S/MIMEÀ» Àû¿ëÇÏ¿© º¸¾È äÆÃÀ» ±¸ÇöÇÒ ¼öµµ ÀÖÁö¸¸ ÀÌ ±Û¿¡¼­´Â TLSv1À» »ç¿ëÇÑ °£´ÜÇÑ º¸¾È äÆÃ ÇÁ·Î±×·¥À» ±¸ÇöÇØ º¸±â·Î ÇÏÀÚ.
SSL/TLS ÇÁ·ÎÅäÄÝÀº Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö »çÀÌ¿¡ ÀÎÁõ ¹× ¾Ïȣȭ Åë½ÅÀ» À§ÇØ »ç¿ëµÇ´Â º¸¾È ÇÁ·ÎÅäÄÝÀÌ´Ù. SSL/TLS ÇÁ·ÎÅäÄÝÀº TCP ÇÁ·ÎÅäÄÝ À§¿¡ À§Ä¡Çϰí ÀÖÀ¸¸ç, <±×¸² 2>¿Í °°ÀÌ HTTP, Telnet, FTP, SIP µîÀÇ ÇÁ·ÎÅäÄÝ ÇÏ´Ü¿¡ À§Ä¡ÇÏ¿© SSL/TLS ÇÁ·ÎÅäÄÝÀº TCP¸¦ ÀÌ¿ëÇÏ´Â ¸ðµç Á¾·ùÀÇ ÀÀ¿ë¿¡ Àû¿ëÀÌ °¡´ÉÇÏ´Ù. ¿¹·Î ÇöÀç ¿ì¸®°¡ »ç¿ëÇÏ´Â À¥ ºê¶ó¿ìÀú´Â SSL/TLS ÇÁ·ÎÅäÄÝÀÌ Áö¿øµÇ¸ç À̸¦ ÀÌ¿ëÇÏ¿© ÀüÀÚ»ó°Å·¡¿¡ ¸¹ÀÌ ÀÌ¿ëµÇ°í ÀÖ´Ù.
SSL/TLS´Â °ø°³Å° ÀÎÁõ¼­¿¡ ±â¹ÝÀ» µÐ ÀÎÁõ ¹æ¹ýÀ» »ç¿ëÇϰí À͸í¸ðµå(Anonymous), ¼­¹ö ÀÎÁõ¸ðµå(Server authenticated), ±×¸®°í Ŭ¶óÀ̾ðÆ®-¼­¹ö(»óÈ£) ÀÎÁõ¸ðµå(Mutual authenticated)¸¦ °®´Â´Ù. À͸í¸ðµå´Â ¼­¹ö°¡ °ø°³Å° ÀÎÁõ¼­¸¦ ¹ß±Þ¹ÞÁö ¾ÊÀº °æ¿ì¿¡µµ Àû¿ëÀÌ °¡´ÉÇÏ´Ù´Â ÀåÁ¡ÀÌ ÀÖÀ¸³ª ¾ÈÀü¿¡ ¹®Á¦°¡ Àֱ⠶§¹®¿¡ ÇöÀç ¸¹ÀÌ »ç¿ëµÇ°í ÀÖÁö ¾Ê´Ù. ¼­¹ö ÀÎÁõ¸ðµå´Â ¼­¹ö°¡ SSL/TLS ¼­¹ö¿ë °ø°³Å° ÀÎÁõ¼­¸¦ °¡Áö°í ÀÖÀ» °æ¿ì¿¡¸¸ °¡´ÉÇÑ ¸ðµå·Î SSL/TLS ÇÁ·ÎÅäÄÝÀ» ÀÌ¿ëÇÏ´Â »ç¿ëÀÚ´Â ¼­¹ö ÀÎÁõ¸ðµå µ¿À۽à ¼­¹ö¸¦ ÀÎÁõÇÒ ¼ö ÀÖ´Ù. ÀÌ ¹æ½ÄÀº ÇöÀç °¡Àå ¸¹ÀÌ ÀÌ¿ëµÇ´Â ¹æ¹ýÀÌ´Ù.
»óÈ£ ÀÎÁõ¸ðµå(¼­¹ö/Ŭ¶óÀ̾ðÆ®)´Â »ç¿ëÀÚ¿Í ¼­¹ö°¡ ¸ðµÎ °ø°³Å° ÀÎÁõ¼­¸¦ °¡Áö°í ÀÖÀ» °æ¿ì¿¡¸¸ °¡´ÉÇÑ ¸ðµå·Î ÀÌ ¸ðµå°¡ µ¿ÀÛÇÒ °æ¿ì »ç¿ëÀÚ¿Í ¼­¹ö´Â ¼­·Î¿¡ ´ëÇØ¼­ ÀÎÁõÀÌ °¡´ÉÇÏ´Ù. ¶ÇÇÑ SSL/TLS´Â ¿©·¯ Á¾·ùÀÇ ¾ÏÈ£ ¾Ë°í¸®ÁòÀ» Áö¿øÇÏ°í ½ÇÇà°úÁ¤¿¡¼­ À̵éÀ» ¼±ÅÃÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¾Ë°í¸®ÁòÀÇ ¼±ÅÃÀº Ŭ¶óÀÌ¾ðÆ®°¡ »ç¿ë °¡´ÉÇÑ ¾ÏÈ£ ¾Ë°í¸®ÁòÀÇ ¸®½ºÆ®¸¦ º¸³»°í, ¼­¹ö°¡ ¹ÞÀº ¸®½ºÆ® Áß¿¡¼­ ¼±ÅÃÇÏ´Â ¹æ¹ýÀÌ´Ù.
SSL/TLS´Â ·¹ÄÚµå ÇÁ·ÎÅäÄÝ¡¤¾ÏÈ£ ±Ô°Ý º¯°æ ÇÁ·ÎÅäÄÝ¡¤°æ°í ÇÁ·ÎÅäÄÝ¡¤1Çڵ弼ÀÌÅ© ÇÁ·ÎÅäÄÝ·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ·¹ÄÚµå ÇÁ·ÎÅäÄÝÀº TCP ÇÁ·ÎÅäÄÝÀÇ »óÀ§¿¡¼­ µ¿ÀÛÇÏ¸ç ±â¹Ð¼º°ú ¸Þ½ÃÁö ¹«°á¼º °°Àº º¸¾È ¼­ºñ½º¸¦ Á¦°øÇϰí, ¾ÏÈ£ ±Ô°Ý º¯°æ ÇÁ·ÎÅäÄÝÀº ¸Þ½ÃÁö Àü¼Û ÈÄ Àü¼ÛµÇ´Â ¸Þ½ÃÁö´Â »õ·Ó°Ô Çù»óµÈ Security ÆÄ¶ó¹ÌÅÍ¿¡ ÀÇÇØ º¸È£µÊÀ» ¾Ë¸®´Âµ¥ »ç¿ëµÈ´Ù. °æ°í ÇÁ·ÎÅäÄÝÀº »ó´ë¿¡°Ô SSL/TLS °ü·Ã °æ°í¸¦ Àü´ÞÇϱâ À§ÇØ »ç¿ëµÈ´Ù. Çڵ弼ÀÌÅ© ÇÁ·ÎÅäÄÝÀº ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ® °£¿¡ °¢ ÀÎÁõ ¸ðµå¸¦ Çã¿ëÇÏ°í ¾ÏÈ£¿Í MAC ¾Ë°í¸®ÁòÀ» ±³È¯Çϸç, ¾Ïȣȭ ۵éÀ» SSL/TLS ·¹Äڵ忡¼­ º¸³»Áø µ¥ÀÌÅÍ¿¡ ±â¹Ð¼º°ú ¸Þ½ÃÁö ¹«°á¼ºÀ» Àû¿ëÇϱâ À§ÇÏ¿© »ç¿ëµÈ´Ù.

¶óÀ̺귯¸® »ç¿ë ¹× ÀÀ¿ë ÇÁ·Î±×·¥ÀÇ Àû¿ë
ÀÌÁ¦ OpenSSL ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¿© °£´ÜÇÑ º¸¾È äÆÃÀ» ±¸ÇöÇØº¸ÀÚ. ¸ÕÀú ±¸ÇöÇϱâ À§ÇØ ÇÊ¿äÇÑ °ÍµéÀ» ¾Ë¾Æº¸¸é ¸®´ª½º ±â¹ÝÀÇ Ã¤ÆÃ ÇÁ·Î±×·¥ ¶Ç´Â À©µµ¿ì ±â¹ÝÀÇ Ã¤ÆÃ ÇÁ·Î±×·¥°ú OpenSSL ¶óÀ̺귯¸®°¡ ÇÊ¿äÇÏ´Ù. SSL/TLS º¸¾È ÇÁ·ÎÅäÄÝÀº TCP ±â¹Ý¿¡¼­ µ¿ÀÛÇϱ⠶§¹®¿¡ äÆÃ ÇÁ·Î±×·¥»Ó¸¸ ¾Æ´Ï¶ó TCP ¼ÒÄÏÀ» ÀÌ¿ëÇÑ ¸ðµç ÀÀ¿ë ÇÁ·Î±×·¥¿¡ Àû¿ëÀÌ °¡´ÉÇÏ´Ù. OpenSSL ¶óÀ̺귯¸® »ý¼ºÀ» ¸®´ª½º¿Í À©µµ¿ì¿¡ µû¶ó °¢°¢ »ý¼ºÇÑ ÈÄ À̸¦ ÀÌ¿ëÇÏ¿© TLS°¡ Àû¿ëµÈ º¸¾È äÆÃÀ» ±¸ÇöÇØº¸ÀÚ.
º¸¾È ¶óÀ̺귯¸® »ý¼ºÀº ¼Ò½º ÄÄÆÄÀÏÀ» ÇÏ¿© »ý¼ºÇÒ ¼öµµ ÀÖ°í ¶óÀ̺귯¸® ÆÐŰÁö¸¦ ÀÌ¿ëÇÒ ¼öµµ ÀÖ´Ù. OpenSSL¿¡¼­´Â ¿©·¯ ¾ÏÈ£ ¾Ë°í¸®Áò°ú À¯Æ¿¸®Æ¼°¡ Àֱ⠶§¹®¿¡ ÇÊ¿äÇÑ ºÎºÐ¸¸À» °ñ¶ó¼­ º¸¾ÈÀ» Àû¿ëÇÏ·Á´Â »ç¿ëÀڵ鿡°Ô´Â ¼Ò½º ÄÄÆÄÀÏ ¹æ¹ýÀ» ÃßÃµÇØ ÁÖ°í ½Í´Ù. ¶óÀ̺귯¸® ÆÐŰÁö´Â Win32 Openssl ¶Ç´Â RPMÀ» »ç¿ëÇϱ⠹ٶõ´Ù.

OpenSSL ¼Ò½º ÄÄÆÄÀÏ·Î ¶óÀ̺귯¸® »ý¼ºÇϱâ
¸®´ª½º ȯ°æ¿¡¼­ ¸¸µé±â
OpenSSL ¼Ò½º¸¦ »çÀÌÆ®(www.openssl.org)¿¡¼­ °¡Àå ÃÖ±Ù ¹öÀüÀÎ openssl-0.9.7.tar.gz¸¦ ´Ù¿î¹ÞÀº ÈÄ ¾ÐÃàÀ» Ç®°í ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÀ» ÇÑ´Ù. ÀÌ´Â °¡Àå ±âº»ÀûÀÎ ÄÄÆÄÀÏ ¹æ¹ýÀÌ¸ç ±âŸ ´Ù¸¥ ÄÄÆÄÀÏ ¿É¼ÇÀº ../openssl-0.9.7/ µð·ºÅ丮ÀÇ INSTALL ÆÄÀÏÀ» Âü°í·Î ÄÄÆÄÀÏÀ» ÇÑ´Ù.
$ ./config shared?
$ make ?
$ make test ?
$ make install ?
ÀÌ·¸°Ô Çϸé /usr/local/ssl/lib/ µð·ºÅ丮¿¡ libcrypto.a¿Í libssl.a ¶óÀ̺귯¸®¿Í libcrypto.so.0.9.7°ú libssl.so.0.9.7 ¶óÀ̺귯¸®°¡ »ý¼ºµÈ´Ù. °¢°¢ ¾ÏÈ£ ¶óÀ̺귯¸®¿Í SSL/TLS °ü·Ã ¶óÀ̺귯¸® ÆÄÀÏÀÌ´Ù. ¸®´ª½º ¼³Ä¡½Ã ±âº»ÀûÀ¸·Î OpenSSLÀÌ ¼³Ä¡µÇ¾î Àֱ⠶§¹®¿¡ /usr/lib/ µð·ºÅ丮¿¡ ±¸ ¹öÀüÀÇ ¶óÀ̺귯¸® ÆÄÀϵéÀÌ ÀÖÀ» °ÍÀÌ´Ù. ¹æ±Ý ÄÄÆÄÀÏÇÏ¿© »ý¼ºµÈ ¶óÀ̺귯¸® ÆÄÀϵéÀ» /usr/lib/ µð·ºÅ丮¿¡ º¹»çÇØÁÖ¸é ¸®´ª½º ½Ã½ºÅÛ¿¡¼­ ÃÖ±ÙÀÇ OpenSSL ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

À©µµ¿ì ȯ°æ¿¡¼­ ¸¸µé±â
À©µµ¿ì¿¡¼­´Â ActivePerlÀ» ¸ÕÀú ´Ù¿î¹Þ¾Æ ¼³Ä¡¸¦ ÇØ¾ß ÇÑ´Ù. ActivePerlÀº »çÀÌÆ®(www.activestate.com/Products/Active Pe rl/)¿¡¼­ ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù. ActivePerlÀº ½ÇÇà ÆÄÀÏ·Î ¹Ù·Î ¼³Ä¡¸¦ ÇÏ¸é µÈ´Ù. ´ÙÀ½¿¡ openssl-0.9.7.tar.gz ´Ù¿î¹Þ¾Æ ÀÓÀÇÀÇ µð·ºÅ丮(C:)¿¡ ¾ÐÃàÀ» Ǭ ÈÄ ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÀ» ÇÑ´Ù. À©µµ¿ì¿¡¼­ ÄÄÆÄÀÏ °ü·Ã ÆÄÀÏÀÎ INSTALL.W32¸¦ Âü°íÇÏ¿© ±âŸ ´Ù¸¥ ÄÄÆÄÀÏ ¿É¼ÇÀ» Àû¿ëÇÒ ¼ö ÀÖ´Ù.

C:openssl-0.9.7> perl Configure VC-WIN32 ?
C:openssl-0.9.7> msdo_ms ?
C:openssl-0.9.7> nmake -f ms tdll.mak ?
C:openssl-0.9.7> cd out32dll ?
C:openssl-0.9.7> ..ms est ?

ÀÌ·¸°Ô Çϸé C:openssl-0.9.7out32dll µð·ºÅ丮¿¡ ssleay32.dll, libeay32.dll, ssleay32.lib, libeay32.lib ¶óÀ̺귯¸®¿Í openssl ½ÇÇà ¸í·É¾î ÆÄÀÏÀÌ »ý¼ºµÈ´Ù.
OpenSSLÀº VC++ ȯ°æ »ç¿ëÀÚ¸¦ À§ÇÏ¿© »çÀÌÆ®(www. iconsinc.com/~agray/ossldev/)¿¡¼­ VC6ossl097.tar.gz ÆÄÀÏÀ» ´Ù¿î¹Þ¾Æ openssl ÇÁ·ÎÁ§Æ® ÆÄÀÏÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù. ¸ÕÀú openssl-0.9.7.tar.gz¸¦ ´Ù¿î¹Þ¾Æ ¾ÐÃàÀ» Ç®°í VC6ossl097.tar.gz ÆÄÀÏÀ» C:openssl-0.9.7 µð·ºÅ丮¿¡ ¾ÐÃàÀ» Ç®¾î Msvc097 µð·ºÅ丮(C:openssl-0.9.7Msvc097)°¡ »ý¼ºµÇ°Ô ÇÑ´Ù. ÀÌ°Í ¶ÇÇÑ ActivePerlÀº ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ VC++ ȯ°æ¿¡¼­ openssl ÇÁ·ÎÁ§Æ® ÆÄÀÏ »ý¼ºÀ» À§ÇÑ °úÁ¤À» µû¸¥´Ù.

C:openssl-0.9.7>perl Configure VC-WIN32 ?
C:openssl-0.9.7>msdo_ms.bat ?
C:openssl-0.9.7>perl msvc097doinc.pl ?

¾ÕÀÇ °úÁ¤À» ¸¶Ä¡°í ³­ ÈÄ C:openssl-0.9.7Msvc097¿¡¼­ openssl.dsw ÆÄÀÏÀ» ¿­¸é VC++ ȯ°æ¿¡ opensslÀÌ ¿­¸®°Ô µÈ´Ù. ¸Þ´º ¹Ù¿¡¼­ ¡¸Build | Batch Build | Build¡¹¸¦ ½ÇÇà½ÃÄÑ ÄÄÆÄÀÏÇϸé C:openssl-0.9.7out32dll µð·ºÅ丮¿¡ openssl ½ÇÇà ¸í·É¾î ÆÄÀϰú ¶óÀ̺귯¸® ÆÄÀÏÀÌ »ý¼ºµÈ´Ù.

OpenSSL ¶óÀ̺귯¸®¸¦ ÀÀ¿ë ÇÁ·Î±×·¥¿¡ Àû¿ëÇϱâ
À©µµ¿ì¿ë OpenSSL ¶óÀ̺귯¸® ÆÐŰÁö
www.shininglightpro.com/search.php?search name=Win 32+OpenSSL¿¡¼­ À©µµ¿ì¿ë OpenSSL ¶óÀ̺귯¸® ÆÐŰÁö¸¦ ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù. ÆÄÀÏ Win32 OpenSSL(0.9.7) v1.0 Final(OpenSSL. exe)À» ´Ù¿î¹Þ¾Æ ½ÇÇà½Ã۸é C:OpenSSL µð·ºÅ丮¿¡ OpenSSL °ü·Ã ¶óÀ̺귯¸® ÆÄÀÏ(ssleay32.lib, libeay32.lib) ¹× Çì´õ ÆÄÀϰú ½ÇÇà ÆÄÀÏ µîÀÌ ¼³Ä¡µÈ´Ù. ¶óÀ̺귯¸® ÆÄÀÏ(ssleay32.dll, libeay32.dll)Àº À©µµ¿ì ½Ã½ºÅÛ ¶óÀ̺귯¸® µð·ºÅ丮¿¡ »ý¼ºµÈ´Ù. ¸®´ª½º¸¦ À§ÇÑ openssl RPM ÆÐŰÁöµéµµ ÀÖÁö¸¸, ÇÊÀÚ´Â ¸®´ª½º¿¡¼­´Â ¼Ò½º ÄÄÆÄÀÏ ¹æ¹ýÀ» ÃßÃµÇØÁÖ°í ½Í´Ù.
Áö±Ý±îÁö ¿î¿µÃ¼Á¦¿Í ¶óÀ̺귯¸® »ý¼º ¹æ¹ý¿¡ µû¶ó »ç¿ëÀÚµé ÀÔ¸À´ë·Î º¸¾È ¶óÀ̺귯¸®¸¦ »ý¼ºÇÏ¿´´Ù. ÀÌÁ¦ »ý¼ºµÈ º¸¾È ¶óÀ̺귯¸®¸¦ ÀÏ¹Ý ³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥¿¡ Àû¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸ÀÚ. ÀÌ ±Û¿¡¼­´Â ¾Õ¼± ¾ð±ÞÇÑ ¹Ù¿Í °°ÀÌ ÀÏ¹Ý Ã¤ÆÃ ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© º¸¾ÈÀ» Àû¿ëÇÒ °ÍÀÌ´Ù. TLS Àû¿ëÀ» À§ÇÑ Àü¹ÝÀûÀÎ ±¸Á¶´Â <±×¸² 3>°ú °°´Ù. TCP ä³ÎÀÌ Çü¼ºµÈ ÈÄ TLS´Â TCP¸¦ ±â¹ÝÀ¸·Î º¸¾È ä³ÎÀ» Çü¼ºÇÏ°Ô µÈ´Ù. ¸Þ½ÃÁöÀÇ Àü¼ÛÀº SSL_read(), SSL_write() ÇÔ¼ö¸¦ ÅëÇØ¼­ Application Data·Î Àü¼ÛµÇ´Â ¸ð½ÀÀ» º¼ ¼ö°¡ ÀÖ´Ù.

TLS äÆÃ ¼­¹ö ¸¸µé±â
äÆÃ ¼­¹öÀÇ TLS ¿¬°á ¿äû ¼ö¶ô
ÀÌ ±Û¿¡¼­´Â äÆÃ ÇÁ·Î±×·¥¿¡¼­ TLS¸¦ ±¸ÇöÇϱâ À§ÇØ ÇÊ¿äÇÑ ¼Ò½º ºÎºÐ¸¸À» ¼³¸íÇϰڴÙ. äÆÃ ¼­¹ö ¼Ò½º¸¦ ÀÓÀÇÀÇ µð·ºÅ丮(/home/cjduck/TLS_chatserver)¿¡ À§Ä¡½ÃŲ´Ù. ¸ÕÀú <¸®½ºÆ® 1>Àº äÆÃ ¼­¹ö¿¡¼­ TCP ¼ÒÄÏ ¿¬°á ºÎºÐÀÇ ÀϺκÐÀÌ´Ù. ¿©´À ¼ÒÄÏ ÇÁ·Î±×·¥ÀÇ ÇÑ ºÎºÐÀ¸·Î »ý°¢Çصµ ¹«¹æÇÏ´Ù. äÆÃ ¼­¹ö ¼Ò½º¿¡¼­ ssl.h Çì´õ ÆÄÀÏÀ» includeÇØÁÖ°í TLS °ü·Ã º¯¼ö ¹× ÇÔ¼ö ¼±¾ðÀ» ÇØÁØ´Ù. TLS º¸¾È ä³ÎÀº TCP Ŭ¶óÀÌ¾ðÆ® ¿¬°á ¿äû ¼ö¶ôÀÌ ÀÌ·ç¾îÁø ÈÄ TLS_accept() ÇÔ¼ö¸¦ ÅëÇÏ¿© Çü¼ºµÈ´Ù.

äÆÃ ¼­¹öÀÇ TLS °ü·Ã ¿É¼Ç ¼³Á¤
<¸®½ºÆ® 2>´Â TLS¸¦ Àû¿ëÇϱâ À§ÇØ ÇÊ¿äÇÑ ¿É¼ÇÀ» ¼³Á¤ÇÏ´Â ÇÔ¼ö TLS_accept()¸¦ ±¸ÇöÇÑ ºÎºÐÀÌ´Ù. ÀÌ ¿ÜÀÇ TLS °ü·Ã ÇÔ¼öµéÀº ¶óÀ̺귯¸®¸¦ ÅëÇØ¼­ Á¦°øµÈ´Ù. TLS_accept() ÇÔ¼ö´Â TLS ¼­¹ö¿¡¼­ ¼³Á¤ÇØ ÁÙ ¾ÏÈ£ ¾Ë°í¸®Áò ¹× ÀÎÁõ¼­¿¡ °ü·ÃµÈ »çÇ×À¸·Î ±¸¼ºµÈ´Ù. ¼­¹öÀÇ ÀÎÁõ¼­ ¹× °³ÀÎŰ ÆÄÀÏÀº cnsl_cert.pem ÆÄÀϰú cnsl_key.pem ÆÄÀÏ·Î ¼³Á¤À» ÇØÁØ´Ù. ¼­¹ö¿¡¼­ »ç¿ëµÇ´Â ÀÎÁõ¼­´Â OpenSSL ÇÁ·ÎÁ§Æ®¿¡¼­ °¡»ó ÀÎÁõ±â°ü(CA)¸¦ ±¸¼ºÇÏ¿© ¹ß±ÞµÈ ÀÎÁõ¼­¸¦ »ç¿ëÇÑ °ÍÀÌ´Ù. ÀÎÁõ¼­ »ý¼º ºÎºÐÀº µÚ¿¡¼­ ¼³¸íÇϱâ·Î ÇÏÀÚ.
Ŭ¶óÀÌ¾ðÆ®¿¡¼­ º¸³»ÁØ ¾ÏÈ£ ¾Ë°í¸®Áò ¸®½ºÆ® Áß¿¡¼­ ¼­¹ö¿¡¼­´Â SSL_CTX_set_cipher_list() ÇÔ¼ö¸¦ ÅëÇØ ¡®AES128-SHA¡¯·Î ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. AES ¾ÏÈ£ ¾Ë°í¸®ÁòÀº ÃÖ±Ù¿¡ °¢±¤¹Þ°í ÀÖ´Â ¾ÏÈ£ ¾Ë°í¸®ÁòÀ¸·Î ÇöÀç °¡Àå ÃßõµÇ´Â ¾ÏÈ£ ¾Ë°í¸®ÁòÀÌ´Ù. ±âŸ ´Ù¸¥ ¾ÏÈ£ ¾Ë°í¸®ÁòÀº ssl2.h, ssl3.h, tls1.hÀÇ °¢ Çì´õ ÆÄÀÏ¿¡ defineÀ¸·Î Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î Âü°íÇϱ⠹ٶõ´Ù.
TLS äÆÃ ¼­¹ö ÃʱâÈ­
initialize_ctx() ÇÔ¼ö¿¡¼­´Â TLS º¸¾È ä³Î¿¡¼­ »ç¿ëµÉ ¾ÏÈ£ ¾Ë°í¸®Áò ÃʱâÈ­ ¹× SSLv2/v3 ¶Ç´Â TLSv1 ÇÁ·ÎÅäÄÝ »ç¿ëÇÒ SSL_CTX¸¦ ÃʱâÈ­ÇÑ´Ù. ¶ÇÇÑ ¼­¹ö¿¡¼­´Â TLSv1_server_method(), SSLv2_ser ver_method(), SSLv3_server_method()¸¦ ÅëÇØ¼­ ¼­¹ö¿¡¼­ Àû¿ëÇÏ´Â SSL/TLS º¸¾È ÇÁ·ÎÅäÄÝÀ» ¼³Á¤ÇÒ ¼öµµ ÀÖ´Ù.

TLS º¸¾È ä³ÎÀ» ÅëÇØ ¸Þ½ÃÁö ¾Ï¡¤º¹È£È­
¾Õ¿¡¼­¿Í °°ÀÌ ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ® °£¿¡ º¸¾È ä³ÎÀÌ Çü¼ºµÈ ÈÄ¿¡´Â ±âÁ¸ÀÇ ¼Û¼ö½Å ÇÔ¼öÀÎ write(), read() ÇÔ¼ö ´ë½Å¿¡ SSL_ read()¿Í SSL_write() ÇÔ¼ö¸¦ ÅëÇØ¼­ ¸Þ½ÃÁö¸¦ ¾ÏȣȭÇÏ¿© Àü¼ÛÇÏ°Ô µÈ´Ù.

TLS äÆÃ ¼­¹ö ÄÄÆÄÀÏÇϱâ
ÀÌ¿Í °°ÀÌ ±¸¼ºÇÑ ÈÄ OpenSSL ¶óÀ̺귯¸® ÆÄÀÏ(libssl.a, libcrypto.a)À» /home/cjduck/TLS_chatserver/lib/ µð·ºÅ丮¿¡ º¹»çÇÑ´Ù. ±×¸®°í ´ÙÀ½°ú °°ÀÌ OpenSSL ¶óÀ̺귯¸® ÆÄÀϰú ÇÔ²² ÄÄÆÄÀÏÀ» ÇÑ´Ù.

[root@cnsl TLS_chatserver]$ gcc -o server server.c -L./lib -lssl -lcrypto

TLS Ŭ¶óÀÌ¾ðÆ® ¸¸µé±â
äÆÃ Ŭ¶óÀ̾ðÆ®ÀÇ TLS ¿¬°á ¿äû
ÀÌÁ¦ TLS Ŭ¶óÀÌ¾ðÆ® ºÎºÐÀ» ¿Ï¼º½ÃÄÑ º¸ÀÚ. äÆÃ Ŭ¶óÀÌ¾ðÆ® ¼Ò½º¸¦ ÀÓÀÇÀÇ µð·ºÅ丮(/home/cjduck/TLS_chatclient)¿¡ À§Ä¡½ÃŲ´Ù. TLS ¼­¹ö ºÎºÐ°ú ¸¶Âù°¡Áö·Î <¸®½ºÆ® 5>´Â äÆÃ Ŭ¶óÀÌ¾ðÆ®¿¡¼­ TCP ¼ÒÄÏ ¿¬°á ºÎºÐÀÇ ÀϺκÐÀ» ³ªÅ¸³»°í ÀÖ´Ù. äÆÃ Ŭ¶óÀÌ¾ðÆ® ¼Ò½º¿¡¼­ ssl.h Çì´õ ÆÄÀÏÀ» Æ÷ÇÔ½Ã۰í TLS °ü·Ã º¯¼ö ¹× ÇÔ¼ö ¼±¾ðÀ» ÇØÁØ´Ù. TCP connect()·Î ¼­¹ö¿¡ TCP ¿¬°á ¿äûÀ» ÇÑ ÈÄ TLS_connect() ÇÔ¼ö¸¦ ÅëÇØ¼­ TLS º¸¾È ä³ÎÀ» Çü¼ºÇÑ´Ù.
TLS Ŭ¶óÀÌ¾ðÆ® ÃʱâÈ­
<¸®½ºÆ® 6>Àº TLS_connect() ÇÔ¼ö ±¸Çö ºÎºÐÀÌ´Ù. TLS Ŭ¶óÀÌ¾ðÆ®¿¡¼­ TLS¸¦ ±¸ÇöÇϱâ À§ÇØ ÇØÁÖ¾î¾ß ÇÒ ºÎºÐÀÌ´Ù. ±âŸ SSL/TLS °ü·Ã ÇÔ¼ö´Â OpenSSL ¶óÀ̺귯¸® ÆÄÀÏ¿¡¼­ Á¦°øµÈ´Ù. ÀÌ ºÎºÐµµ TLS ¼­¹ö¿Í °°ÀÌ ¾Ë°í¸®Áò ÃʱâÈ­ ¹× SSLv2/v3 ¶Ç´Â TLSv1 ÇÁ·ÎÅäÄÝ »ç¿ëÇÒ SSL_CTX¸¦ ÃʱâÈ­ÇÑ´Ù. ¶ÇÇÑ Å¬¶óÀÌ¾ðÆ®¿¡¼­µµ TLSv1_server_method(), SSLv2_server_method(), SSLv3_ server_method()¸¦ ÅëÇØ¼­ ¼­¹ö¿Í Åë½ÅÇÒ SSL/TLS º¸¾È ÇÁ·ÎÅäÄÝÀ» ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. ±×¸®°í TLS º¸¾È ä³ÎÀ» ÅëÇØ ¸Þ½ÃÁö¸¦ ¾Ï¡¤º¹È£È­ÇÏ´Â µ¥ ÀÖ¾î SSL_read(), SSL_write() ºÎºÐÀº ¼­¹ö¿Í °°ÀÌ ÇØÁÖ¸é µÈ´Ù.

TLS Ŭ¶óÀÌ¾ðÆ® ÄÄÆÄÀÏ
OpenSSL ¶óÀ̺귯¸® ÆÄÀÏÀ» µ¿ÀÏÇÏ°Ô /home/cjduck/TLS_ chatclient/lib/ µð·ºÅ丮¿¡ º¹»çÇÑ ÈÄ ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÀ» Çϸé TLS äÆÃ Ŭ¶óÀÌ¾ðÆ®°¡ ¿Ï¼ºµÈ´Ù.

[root@cnsl2 TLS_chatclient]$ gcc -o client client.c -L./lib -lssl -lcrypto

OpenSSL¿¡¼­ X.509v3 ÀÎÁõ¼­ ¸¸µé±â
°¡»ó ·çÆ® CA ¸¸µé±â
¾Õ¼­ ±¸ÇöÇÑ TLS º¸¾È äÆÃÀº OpenSSL¿¡¼­ Á¦°øÇÏ´Â X.509v3 ÀÎÁõ¼­¸¦ »ç¿ëÇÏ¿© µ¿À۵ȴÙ. ¿©±â¿¡¼­´Â SSL/TLS »Ó¸¸ ¾Æ´Ï¶ó °ø°³Å° ±â¹Ý±¸Á¶¿¡¼­ »ç¿ëµÇ´Â ÀÎÁõ¼­ »ý¼º ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸±â·Î ÇÏÀÚ. OpenSSLÀÇ openssl.0.9.7/appsÀÇ CA.sh ÆÄÀÏ·Î ½±°Ô ÀÎÁõ¼­¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù. CA.sh ÆÄÀÏÀ» ÀÌ¿ëÇÏ¿© °¡»ó CA¸¦ ±¸¼ºÇÒ ¶§ ÀÎÁõ¼­ °ü·Ã ¼³Á¤ ÆÄÀÏÀº /usr/share/ssl/openssl.cnf ÆÄÀÏ¿¡¼­ ¼³Á¤ÇÑ´Ù.

CA·ÎºÎÅÍ ÀÎÁõ¼­ ¹ß±Þ
¾ÕÀÇ °úÁ¤ÀÌ ³¡³­ ÈÄ apps/demoCA¿¡´Â cacert.pem(CA ÀÎÁõ¼­ ÆÄÀÏ), cakey.pem(CA °³ÀÎŰ ÆÄÀÏ)ÀÌ »ý¼ºµÈ´Ù. apps/demoCA/ newcerts¿¡´Â ¾ÕÀ¸·Î »ý¼ºµÇ´Â »ç¿ëÀÚ ÀÎÁõ¼­ ÆÄÀÏÀÌ »ý¼ºµÇ´Â °÷ÀÌ´Ù. °¡»ó CA·ÎºÎÅÍ ÀÎÁõ¼­¸¦ ¹ß±Þ¹ÞÀ» ¶§ ÀÎÁõ¼­ °ü·Ã ¼³Á¤ ÆÄÀÏÀº /usr/local/ssl/openssl.cnf ÆÄÀÏ¿¡¼­ ¼³Á¤ÇÑ´Ù.

¹ß±Þ¹ÞÀº ÀÎÁõ¼­¸¦ TLS ¼­¹ö ÀÎÁõ¼­·Î »ç¿ë
»ý¼ºµÈ ÀÎÁõ¼­´Â ../apps/demoCA/newcerts µð·ºÅ丮¿¡ 01.pem·Î »ý¼ºµÈ´Ù. 01.pem ÆÄÀÏÀº ¡®---- BEGIN CERTIFICATE ----¡¯ ºÎºÐºÎÅÍ ¡®---- END CERTIFICATE ----¡¯ ºÎºÐ¸¸À» ÀúÀåÇÏ°í ³ª¸ÓÁö ³»¿ëÀº »èÁ¦ÇÏ¿© »ç¿ëÇÑ´Ù. ¾ÕÀÇ °úÁ¤¿¡¼­ »ý¼ºµÈ ÀÎÁõ¼­´Â ¿¹¸¦ µé¾î 01.pemÀº ÆÄÀÏ À̸§À» cnsl_cert.pem·Î Çϰí, cnsl.key´Â ÆÄÀÏ À̸§À» cnsl_key.pem·Î ¹Ù²Ù¾î¼­ SSL/TLS, S/MIME µî¿¡¼­ ÀÎÁõ¼­·Î »ç¿ëµÉ ¼ö ÀÖ´Ù.

±¸ÇöµÈ TLS º¸¾È äÆÃ È®ÀÎÇϱâ
ÀÌÁ¦ ½ÇÁ¦ µ¥ÀÌÅÍ ÆÐŶÀ» Ä¸Ã³ÇØ º¸¾ÈÀÌ Àû¿ëµÇ¾úÀ» ¶§¿Í ±×·¸Áö ¾ÊÀ» ¶§¸¦ ºñ±³ÇÏ¿© È®ÀÎÇØ º¸ÀÚ. ÀÎÅͳݿ¡¼­ ÆÐŶ ĸó ÇÁ·Î±×·¥À» ¼Õ½±°Ô ±¸ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¾î´À °ÍÀ» »ç¿ëÇØµµ ¹«¹æÇϳª ÇÊÀÚ´Â ¡®Ethereal¡¯À̶ó´Â ÇÁ·Î±×·¥À¸·Î äÆÃ ¸Þ½ÃÁö¸¦ È®ÀÎÇØ º¸°Ú´Ù. ÀÌ ÇÁ·Î±×·¥Àº www.ethereal.com¿¡¼­ ´Ù¿î¹ÞÀ» ¼ö ÀÖ´Ù. <È­¸é 1>Àº TCP ÀÏ¹Ý Ã¤³Î°ú TLS º¸¾È ä³ÎÀ» Çü¼ºÇÑ ÈÄ µ¿ÀÏÇÑ ¸Þ½ÃÁö¸¦ Àü¼ÛÇÏ°í ÆÐŶÀ» È®ÀÎÇÑ ¸ð½ÀÀÌ´Ù.

<È­¸é 2>¿Í °°ÀÌ ÀÏ¹Ý TCP¿¡¼­´Â µÎ »ç¿ëÀÚ °£¿¡ ÁÖ°í¹Þ´Â Ä«µå¹øÈ£ ¶Ç´Â ºñ¹Ð¹øÈ£¿¡ ´ëÇØ¼­ ½±°Ô È®ÀÎÀÌ °¡´ÉÇÏ´Ù. ±×·¯³ª TLS°¡ Àû¿ëµÈ º¸¾È äÆÃ¿¡¼­´Â µÎ »ç¿ëÀÚ°¡ äÆÃÀ» Çϱâ Àü¿¡ TLS º¸¾È ä³ÎÀÌ Çü¼ºµÇ´Â °ÍÀ» º¼ ¼ö°¡ ÀÖ°í À̸¦ ÅëÇØ¼­ äÆÃ ³»¿ëÀº ¡®Application Data¡¯·Î Àü¼ÛÀÌ µÇ¾î ¸Þ½ÃÁöÀÇ ³»¿ëÀ» È®ÀÎÇÒ ¼ö°¡ ¾ø´Ù.

³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥À» À§ÇÑ º¸¾È ÇÁ·ÎÅäÄÝ
Áö±Ý±îÁö °ø°³ º¸¾È ¼Ò½º¸¦ ÀÌ¿ëÇÏ¿© ³×Æ®¿öÅ© º¸¾ÈÀ» Áö¿øÇϵµ·Ï ±¸¼ºÇØ º¸¾Ò´Ù. Áö±ÝºÎÅÍ´Â ÀÚüÀûÀÎ º¸¾È ¹æ¹ýÀ» °­±¸ÇÏ¿© »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ. ÇÊÀÚ´Â ³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥À» À§ÇÑ ÀÚüÀûÀÎ º¸¾È ÇÁ·ÎÅäÄÝÀ» ±¸ÇöÇϱâ À§ÇØ ´ÙÀ½°ú °°Àº °¡Á¤À» Çß´Ù. ÀϹÝÀûÀ¸·Î ³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥µéÀº °¡ÀÔÀÚ ±â¹ÝÀ¸·Î ¿î¿µµÇ¸ç ÀÌ·¯ÇÑ °¡ÀÔÀÚµéÀ» ÀÎÁõÇϱâ À§ÇØ ÆÐ½º¿öµå¸¦ »ç¿ëÇÑ´Ù. Ãʱ⿡ ¼­ºñ½º ¿äûÀ» À§ÇØ °¡ÀÔÀÚ´Â ÆÐ½º¿öµå¸¦ ÀÔ·ÂÇÏ°Ô µÇ°í À̸¦ »ç¿ëÇÏ¿© ¼­¹ö´Â »ç¿ëÀÚ¸¦ ÀÎÁõÇÏ°í ¼­ºñ½º¸¦ °³½ÃÇÑ´Ù. ¼­ºñ½º ¸ðµ¨Àº ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ® ÇüÅÂÀ̸ç ÀÌµé °£¿¡ Ű ±³È¯°ú ÆÐ½º¿öµå ±â¹ÝÀÇ ¸Þ½ÃÁö ÀÎÁõÀ» ¼öÇàÇÏ°í °øÀ¯µÈ Ű(´ëĪŰ)¸¦ ±â¹ÝÀ¸·Î Àü¼ÛµÇ´Â µ¥ÀÌÅ͸¦ ¾ÏȣȭÇÑ´Ù.

¿Ö ´ëĪŰ ±â¹Ý ¾ÏÈ£ ¾Ë°í¸®ÁòÀ» »ç¿ëÇϴ°¡
ÇöÀç ÀºÇàÀ̳ª Áõ±Ç ¾÷°è¿¡¼­´Â ÁÖ·Î °øÀÎÀÎÁõ¼­¸¦ »ç¿ëÇÏ´Â PKI(Public-Key Infrastructure)¸¦ »ç¿ëÇÑ´Ù. ±×·¯³ª ÀÌ·¯ÇÑ °ø°³Å° ±â¹ÝÀÇ ¾ÏÈ£ ¾Ë°í¸®ÁòµéÀº °è»ê¿¡ ¸¹Àº ½Ã°£À» ÇÊ¿ä·Î ÇÑ´Ù. µû¶ó¼­ ³×Æ®¿öÅ©¸¦ ±â¹ÝÀ¸·Î ÇÏ´Â ½Ç½Ã°£ ÀÀ¿ë ÇÁ·Î±×·¥µéÀº ¼­ºñ½º ¼Óµµ ÀÚü°¡ ´À·ÁÁö°Å³ª ¼­¹öÀÇ ¼ö¿ë ´É·ÂÀÌ °¨¼ÒµÉ ¼ö ÀÖ´Ù. ¶ÇÇÑ PKI´Â ±â¹Ý ±¸Á¶¸¦ ¸ðµÎ °®Ãá »óÅ¿¡¼­ »ç¿ëÇØ¾ß Çϱ⠶§¹®¿¡ ÀÎÁõ¼­¸¦ ó¸®ÇÏ´Â °úÁ¤ÀÌ ÇÊ¿äÇÏ°í »ç¿ëÀÚ ¸ðµÎ°¡ ÀÎÁõÀ» ¸ðµÎ ¹ß±Þ¹Þ¾Æ¾ß ÇÑ´Ù´Â °¡Àå Ä¿´Ù¶õ Á¦¾àÀ» °¡Áö°í ÀÖ´Ù.
ÀÌ¿¡ ¹ÝÇÏ¿© ´ëĪŰ ±â¹ÝÀÇ ¾ÏÈ£ ¾Ë°í¸®ÁòÀº ¾Ïȣȭ ¼Óµµ°¡ ºü¸£°í °°Àº Ű·Î ¾Ïȣȭ¸¦ ¼öÇàÇϱ⠶§¹®¿¡ PKI¿Í °°Àº ±â¹Ý ±¸Á¶¸¦ ÇÊ¿ä·Î ÇÏÁö ¾Ê°í Àû¿ëÀÌ ½±´Ù. µû¶ó¼­ Ç¥ÁØ º¸¾È ÇÁ·ÎÅäÄÝ¿¡¼­µµ ½ÇÁ¦ º¸È£ÇÒ µ¥ÀÌÅÍ´Â ´ëĪŰ ±â¹ÝÀÇ ¾ÏÈ£ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏ°í ´ëĪ۸¦ º¸È£Çϴµ¥ °ø°³Å°¸¦ »ç¿ëÇÑ´Ù.

³×Æ®¿öÅ© º¸¾È ÇÁ·ÎÅäÄÝ ¼Ò°³ ¹× ±¸Á¶
³×Æ®¿öÅ© º¸¾ÈÀº ³×Æ®¿öÅ©¸¦ ÅëÇØ Àü´ÞµÇ´Â µ¥ÀÌÅͰ¡ ¾ÈÀüÇÏ°Ô ¿øÇÏ´Â ¸ñÀûÁö±îÁö µµÂøÇÏ´Â °ÍÀ» ¸ñÀûÀ¸·Î ÇÏ¸ç ¿©±â¿¡´Â ±â¹Ð¼º¡¤¹«°á¼º¡¤ÀÎÁõÀ» Á¦°øÇØ¾ß ÇÑ´Ù. ±â¹Ð¼ºÀº µ¥ÀÌÅ͸¦ ¾ÏȣȭÇÏ¿© ÇØÄ¿¿Í °°Àº ¾ÇÀÇÀûÀÎ ÀÎÅÍ³Ý »ç¿ëÀÚµéÀÌ º¼ ¼ö ¾øµµ·Ï Çϸç, ¹«°á¼ºÀº ¸Þ½ÃÁö°¡ º¯Á¶µÇÁö ¾Ê¾ÒÀ½À» Áõ¸íÇϰí, ÀÎÁõÀº Á¤´çÇÑ »ç¿ëÀÚ°¡ µ¥ÀÌÅ͸¦ º¸³½ °ÍÀΰ¡¸¦ È®ÀÎÇÏ´Â ÀÛ¾÷ÀÌ´Ù. ÀÌ ±Û¿¡¼­´Â ÀÎÁõ°ú ¹«°á¼ºÀ» µ¿½Ã¿¡ º¸ÀåÇϱâ À§ÇØ MAC(Message Authentication Code)¸¦ »ç¿ëÇÒ °ÍÀ̸ç MAC¿¡ »ç¿ëµÇ´Â Ű´Â »ç¿ëÀÚ¿Í °øÀ¯µÈ ÆÐ½º¿öµå¸¦ ÇØ½ÃÇÑ °ªÀ» ÀÌ¿ëÇÒ °ÍÀÌ´Ù.
ÀÌ·¯ÇÑ ¹æ¹ýÀº MAC¿¡ »ç¿ëÀÚÀÇ ÆÐ½º¿öµå¸¦ »ç¿ëÇϱ⠶§¹®¿¡ »ç¿ëÀÚ¸¦ ÀÎÁõÇÏ°í µ¿½Ã¿¡ ¸Þ½ÃÁö¿¡ ¹«°á¼ºµµ º¸ÀåµÈ´Ù. ±â¹Ð¼ºÀ» Á¦°øÇϱâ À§Çؼ­´Â ´ëĪŰ ±â¹ÝÀÇ ¾ÏÈ£ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÒ °ÍÀε¥ ¿©±â¿¡ »ç¿ëµÇ´Â ۸¦ ¾ÈÀüÇÏ°Ô °øÀ¯ÇÏ´Â °ÍÀÌ °¡Àå Áß¿äÇÑ ¹®Á¦ÀÌ´Ù. ±âÁ¸¿¡ °³¹ßµÇ¾î ÀÖ´Â ¸î¸î ³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥À» º¸¸é º¸¾ÈÀ» Á¦°øÇϱâ À§ÇØ ´ëĪŰ ±â¹ÝÀÇ ¾ÏÈ£ ¾Ë°í¸®ÁòÀ» »ç¿ëÇϱâ´Â ÇÏ¿´À¸³ª Ű ±³È¯ ¾Ë°í¸®ÁòÀ» »ç¿ëÇÏÁö ¾Ê°í ´Ü¼øÈ÷ Àü¼ÛÇÏ´Â ¸Þ½ÃÁö¿¡ ۸¦ ¼û°Ü Àü¼ÛÇϰí ÀÖ´Ù. ÀÌ·¯ÇÑ ´«¼ÓÀÓ ¹æ¹ýÀº ÇØÄ¿¿¡ ÀÇÇØ ½±°Ô ±ú¾îÁú ¼ö ÀÖÀ¸¸ç ¾ÈÀü¼ºÀ» º¸ÀåÇÏÁö ¸øÇÑ´Ù.

¡ß »ç¿ëÇÒ ¾ÏÈ£ ¾Ë°í¸®Áò
- ¾ÏÈ£ ¾Ë°í¸®Áò : AES(Advance Encryption Standard)
- Ű ±³È¯ ¾Ë°í¸®Áò : Diffie-Hellman
- HMAC ¾Ë°í¸®Áò : HMAC_SHA1
- ÇØ½Ã ¾Ë°í¸®Áò : SHA1

<±×¸² 4>´Â ³×Æ®¿öÅ© ÀÀ¿ë ¼­ºñ½º¸¦ À§ÇÑ °£´ÜÇÑ º¸¾È ÇÁ·ÎÅäÄÝÀ» º¸¿©ÁÖ°í ÀÖ´Ù. ¿ì¼± Ű ±³È¯ ¾Ë°í¸®ÁòÀÎ Diffie-HellmanÀ» ÅëÇØ ¾ÈÀüÇÏ°Ô Å°¸¦ ±³È¯ÇÒ °ÍÀÌ¸ç ±³È¯µÈ Ű¿Í Àü¼ÛÇÒ µ¥ÀÌÅ͸¦ ¾ÏÈ£ ¾Ë°í¸®ÁòÀÎ AES¸¦ ÀÌ¿ëÇÏ¿© ¾ÏȣȭÇÒ °ÍÀÌ´Ù. ¶ÇÇÑ Àü¼ÛµÇ´Â ¸ðµç ¸Þ½ÃÁö´Â ÆÐ½º¿öµå¸¦ ÇØ½ÃÇÏ¿© ³ª¿Â ÀÎÁõŰ¿Í ¸Þ½ÃÁö ÀÎÁõ ¾Ë°í¸®ÁòÀÎ HMAC_SHA1À» ÅëÇØ ÀÎÁõ Äڵ带 »ý¼ºÇÏ¿© ºÙ¿©ÁÙ °ÍÀÌ´Ù.
ÀÏ´Ü º¸¾È ÇÁ·ÎÅäÄÝÀ» ±¸ÇöÇϱâ À§Çؼ­´Â ¾ÏÈ£ ¾Ë°í¸®ÁòÀÌ ÀÖ¾î¾ß ÇÑ´Ù. ±×·¯³ª ¾ÏÈ£ ¾Ë°í¸®ÁòÀ» ±¸ÇöÇÏ´Â ÀÛ¾÷Àº Àü¹®¼ºÀÌ ÇÊ¿äÇÏ´Ù. ¾ÏÈ£ ¾Ë°í¸®ÁòÀ» ÀÌÇØÇϰí ÀÖ¾î¾ß ÇÏ¸ç ¾ÏÈ£ ¸ðµâÀÇ ¼º´É Çâ»óÀ» À§ÇØ °è»ê»ó¿¡¼­ ¸î °¡Áö ¿¬»êÀ» ¹Ù²ãÁÖ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù. µû¶ó¼­ ÀÌ ¹®¼­¿¡¼­´Â °ø°³µÈ ¾ÏÈ£ ¸ðµâÀ» ÀÌ¿ëÇϵµ·Ï Çϴµ¥ °ø°³ ¼Ò½º´Â Crypto++³ª OpenSSL µîÀÇ °ø°³ ÇÁ·ÎÁ§Æ®¿¡¼­ ÃßÃâÇÏ¿© »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¡ß Crypto++ Library 4.2 »çÀÌÆ® : http://www.eskimo.com/~weidai/cryptlib. html

ÀÌ ¿Ü¿¡µµ ¿©·¯ »çÀÌÆ®¿¡¼­ º¸¾È¿¡ °ü·ÃµÈ °ø°³ ¼Ò½º Äڵ峪 ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸³ª ¿©±â¿¡¼­´Â Crypto++ Library 4.2¸¦ »ç¿ëÇÑ´Ù.

¸Þ½ÃÁö¿¡ ÀÎÁõ µµÀåÀ» Âï¾î º¸ÀÚ
Áö±ÝºÎÅÍ ½ÇÁ¦ ±¸ÇöÀ» ÇØº¸µµ·Ï ÇϰڴÙ. ¿ì¼± ¸Þ½ÃÁöÀÇ ÀÎÁõÀ» À§ÇØ ÆÐ½º¿öµå¸¦ ÇØ½Ã ÇÔ¼ö¿¡ ³Ö¾î ÇØ½Ã °ªÀ» °è»êÇØ¾ß ÇÑ´Ù. ´ÙÀ½Àº ÇØ½Ã ÇÔ¼öÀÇ ÀÎÅÍÆäÀ̽º¸¦ º¸¿©ÁÖ°í ÀÖ´Ù.

¡ß ÇØ½Ã ¾Ë°í¸®Áò
¡© SHA1(ÇØ½Ã ÇÔ¼ö)
BYTE * bpMsg; // ÇØ½ÃÇÒ µ¥ÀÌÅÍ
int nMsgLen; // ÇØ½ÃÇÒ µ¥ÀÌÅÍ ±æÀÌ
BYTE baHashSHA1[20]; // ÇØ½Ã °á°ú
SHA1().CalculateDigest(baHashSHA1, bpMsg, nMsgLen); // ÇØ½Ã

ÀÌ·¸°Ô ÆÐ½º¿öµå¸¦ ÇØ½ÃÇÑ °ª°ú ¸Þ½ÃÁö¸¦ ÀÌ¿ëÇÏ¿© ÀÎÁõ Äڵ带 »ý¼ºÇÏ´Â HMAC/SHA1 ÇÔ¼öÀÇ ÀÎÅÍÆäÀ̽º¸¦ »ìÆìº¸°Ú´Ù.

¡© HMAC/SHA1(HMAC ÇÔ¼ö)
BYTE * bpMsg; // ÇØ½ÃÇÒ µ¥ÀÌÅÍ
int nMsgLen; // ÇØ½ÃÇÒ µ¥ÀÌÅÍ ±æÀÌ
BYTE * bpKey; // ÇØ½Ã¿¡ »ç¿ëµÉ Ű
int nKeyLen; // ÇØ½Ã¿¡ »ç¿ëµÉ Ű ±æÀÌ
BYTE baHMACSHA1[20]; // ÇØ½Ã °á°ú
typedef HMAC HMAC_SHA1;

HMAC_SHA1 hmacsha1(bpKey, nKeyLen); // Ű ¼³Á¤
hmacsha1.CalculateDigest(baHMACSHA1, bpMsg, nMsgLen); // ÇØ½Ã

ÀÌ·¯ÇÑ ÀÎÁõÀ» ¼öÇàÇÏ´Â ÀÌÀ¯´Â »ç¿ëÀÚ¸¦ ÀÎÁõÇÏ´Â ¸ñÀû°ú Diffie-Hellman Ű ±³È¯ ¾Ë°í¸®ÁòÀ» µ¶¸³ÀûÀ¸·Î ¼öÇàÇϸé man_in_the_ middle_attackÀÌ °¡´ÉÇϱ⠶§¹®¿¡ À̸¦ ¸·±â À§Çؼ­´Ù.

۸¦ ±³È¯ÇØ º¸ÀÚ
Ű ±³È¯À» À§Çؼ­´Â ´ÙÀ½°ú °°Àº ¸î °¡Áö ÆÄ¶ó¹ÌÅͰ¡ ÇÊ¿äÇÏÁö¸¸ Áö¸é °ü°è»ó ¿©±â¿¡¼­´Â Diffie-Hellman ÆÄ¶ó¹ÌÅÍÀÇ ¼öÇÐÀû Àǹ̸¦ ¼³¸íÇÏÁö´Â ¾Ê°Ú´Ù.

¡ß Ű ±³È¯ ¾Ë°í¸®Áò
¡© Diffie-Hellman ÆÄ¶ó¹ÌÅÍ »ý¼º(512 ºñÆ®) ; °³ÀÎŰ, °ø°³Å° »ý¼º
? generator´Â ÀϹÝÀûÀ¸·Î 2, 3, 5¸¦ »ç¿ëÇÑ´Ù.
? ¼Ò¼ö´Â ·£´ýÇÏ°Ô »ý¼ºÇؼ­ »ç¿ëÇÒ ¼ö ÀÖÀ¸³ª Å« ¼Ò¼ö¸¦ »ý¼ºÇϴµ¥ ¸¹Àº ½Ã°£ÀÌ ¼Ò¿äµÈ´Ù.
? Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö´Â ¹Ì¸® °íÁ¤µÈ ¼Ò¼ö, generator¸¦ »ç¿ëÇÑ´Ù. Áï ÇÁ·Î±×·¥¿¡ ÀÌ¹Ì °ªÀ» ¼³Á¤ÇÏ°í »ç¿ëÇÑ´Ù.
? Ŭ¶óÀÌ¾ðÆ®¿Í ¼­¹ö´Â °è»êµÇ¾î ³ª¿Â °ø°³Å°¸¦ »ó´ë¹æ¿¡°Ô Àü¼ÛÇÏ°í °³ÀÎŰ´Â °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù.

Diffie-Hellman °³ÀÎŰ ¹× °ø°³Å° »ý¼ºµÈ ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.

BYTE baPrime[64]; // °íÁ¤µÈ ¼Ò¼ö
int nGroup; // generator
BYTE baPri[64]; // °³ÀÎŰ
BYTE baPub[64]; // °ø°³Å°
Integer IPrime; // ¼Ò¼ö
Integer IGroup; // generator

for(int i=0; i<64; i++)
IPrime.SetByte(i, baPrime[i]); // °íÁ¤µÈ ¼Ò¼ö »ç¿ë

IGroup=nGroup; // generator ÀÔ·Â
DH DHVar(IPrime, IGroup); // ¼Ò¼ö ¹× generator ¼³Á¤
LC_RNG rng(time(NULL));
DHVar.GenerateKeyPair(rng, baPri, baPub); // °³ÀÎŰ, °ø°³Å° »ý¼º

¡ß Diffie-Hellman °ø°³Å° »ý¼º(512 ºñÆ®)
ÀÌÁ¦ ±³È¯ÇÑ DH ÆÄ¶ó¹ÌÅ͸¦ ÀÌ¿ëÇÏ¿© °øÀ¯Å°¸¦ »ý¼ºÇØ º¸ÀÚ.
? generator, ¼Ò¼ö´Â °³ÀÎŰ, °ø°³Å° »ý¼º½Ã »ç¿ëÇÑ °ªÀ» »ç¿ëÇÑ´Ù.
? Diffie-Hellman Ű »ý¼º ÇÔ¼ö¿¡´Â »ó´ë¹æÀÌ º¸³»ÁØ °ø°³Å°¿Í ÀÚ½ÅÀÇ °³ÀÎ۸¦ »ç¿ëÇØ¼­ Diffie-Hellman °øÀ¯Å°¸¦ »ý¼ºÇÑ´Ù.

Diffie-Hellman °øÀ¯Å° »ý¼º°ú °ü·ÃµÈ ¼Ò½º´Â ´ÙÀ½°ú °°´Ù.

BYTE baPrime[64]; // °íÁ¤µÈ ¼Ò¼ö
int nGroup; // generator
BYTE baPri[64]; // °³ÀÎŰ
BYTE baPub[64]; // »ó´ë¹æ °ø°³Å°
BYTE baAgree[64]; // Diffie-Hellman °øÀ¯Å°
Integer IPrime, IGroup;

for(int i=0; i<64; i++)
IPrime.SetByte(i, baPrime[i]); // °íÁ¤µÈ ¼Ò¼ö »ç¿ë
IGroup=nGroup; // generator ÀÔ·Â
DH DHVar(IPrime, IGroup); // ¼Ò¼ö ¹× generator ¼³Á¤
DHVar.Agree(baAgree, baPri, baPub, TRUE); // Diffie-Hellman Ű »ý¼º
³» µ¥ÀÌÅÍ´Â ³»°¡ º¸È£ÇÏÀÚ
ÀÌÁ¦ Ű ±³È¯ÀÌ ³¡³µÀ¸´Ï ±× ۸¦ °¡Áö°í µ¥ÀÌÅ͸¦ ¾ÏÈ£È­ÇØ º¸ÀÚ. ¾Ïȣȭ ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

¡ß ¾ÏÈ£ ¾Ë°í¸®Áò
¡© AES ¾Ïȣȭ(ECB ¸ðµå)
? DES, 3DES, RC2, IDEAµµ µ¿ÀÏÇÑ ¹æ¹ýÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç, CBC, CFB, OFB ¸ðµå »ç¿ë½Ã º°µµÀÇ IV ¼³Á¤ÀÌ ÇÊ¿äÇÏÁö¸¸ ¿©±â¿¡¼­´Â ECB ¸ðµå¸¦ »ç¿ëÇÏ¿© ÇÊ¿äÇÏÁö ¾Ê´Ù.
? ¾Ï/º¹È£È­´Â ºí·° ´ÜÀ§(128 ºñÆ®)·Î ¼öÇàÇϸç, ºí·°ÀÇ ¹è¼ö°¡ ¾Æ´Ï¸é ºí·°ÀÇ ¹è¼ö°¡ µÇµµ·Ï ÆÐµùÀÌ ÇÊ¿äÇÏ´Ù.

´ÙÀ½Àº AES ¾ÏȣȭÀÇ °æ¿ì´Ù.

BYTE * bpPlainMsg; // Æò¹®
int nPlainMsgLen; // Æò¹® ±æÀÌ
BYTE * bpKey; // ¾Ïȣȭ¿¡ »ç¿ëµÉ Ű
int nKeyLen; // ¾Ïȣȭ¿¡ »ç¿ëµÉ Ű ±æÀÌ
BYTE * bpCipherMsg; // ¾ÏÈ£¹®

AESEncryption EncAES(bpKey, nKeyLen); // Ű ¼³Á¤
for(int i=0; i*16 EncAES.ProcessBlock(bpPlainMsg+i*16, bpCipherMsg+i*16); // ¾Ïȣȭ

ÀÌ¿Í ÇÔ²² AES º¹È£È­(ECB ¸ðµå)ÀÇ °æ¿ì´Â ´ÙÀ½°ú °°´Ù.

BYTE * bpCipherMsg; // ¾ÏÈ£¹®
int nPlainMsgLen; // Æò¹® ±æÀÌ
BYTE * bpKey; // º¹È£È­¿¡ »ç¿ëµÉ Ű
int nKeyLen; // º¹È£È­¿¡ »ç¿ëµÉ Ű ±æÀÌ
BYTE * bpPlainMsg; // Æò¹®

AESDecryption DecAES(bpKey, nKeyLen); // Ű ¼³Á¤
for(int i=0; i*16 DecAES.ProcessBlock(bpCipherMsg+i*16, bpPlainMsg+i*16); // º¹È£È­

Àü¼Û µ¥ÀÌÅÍ¿¡ º¸¾È ¸ðµâ Àû¿ë
ÀÌÁ¦ Àü¼ÛÇÒ µ¥ÀÌÅÍ¿¡ º¸¾ÈÀ» Àû¿ëÇØ º¸ÀÚ. ¿ì¼± Àü¼ÛÇÒ ¸Þ½ÃÁö¸¦ ¾ÏÈ£ ¾Ë°í¸®ÁòÀ» ÅëÇØ ¾ÏȣȭÇÏ´Â µ¥ ºí·° ´ÜÀ§ÀÇ ¾ÏÈ£ ¾Ë°í¸®ÁòÀ̱⠶§¹®ÀÇ ¾Ïȣȭ ºí·°ÀÇ ¹è¼ö¸¸Å­ Å©±â°¡ Áõ°¡ÇÒ ¼ö ÀÖ´Ù. ±× ÈÄ¿¡ ÀÎÁõ ¾Ë°í¸®ÁòÀ» ÅëÇØ ÀÎÁõ ÄÚµå(MAC)¸¦ »ý¼ºÇÏ¿© ºÙÀδÙ. ÀÌ·¸°Ô ÀÎÁõÀ» ¾Ïȣȭ ÀÌÈÄ¿¡ ¼öÇàÇÏ´Â ÀÌÀ¯´Â Áß°£¿¡ µ¥ÀÌÅͰ¡ º¯Á¶µÇ¾úÀ» °æ¿ì ºü¸£°Ô ÆÇ´ÜÇÏ¿© º¹È£È­Çϱâ Àü¿¡ º¯Á¶µÈ ÆÐŶÀ» ¹ö¸®±â À§ÇÔÀÌ´Ù.
Áö±Ý±îÁö °£´ÜÇÑ º¸¾È ÇÁ·ÎÅäÄÝÀ» ¾Ë¾Æº¸¾Ò´Âµ¥ ¾Õ¿¡¼­ ¾ð±ÞÇÑ ¾Ïȣȭ¿Í ÀÎÁõÀ» ¸ðµÎ ±¸ÇöÇØ¾ß ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ÆÐ½º¿öµå ±â¹ÝÀÇ ³×Æ®¿öÅ© ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¾Æ´Ñ °æ¿ì, ÀÎÁõ ºÎºÐÀ» Á¦¿ÜÇϰí Ű ±³È¯°ú ¾Ïȣȭ¸¸ ¼öÇàÇÏ¿©µµ µÇÁö¸¸ »ç¿ëÀÚ ÀÎÁõÀº Diffie-Hellman¿¡¼­ man_in_the_middle_attackÀÌ °¡´ÉÇÑ ¾àÁ¡À» º¸¿ÏÇϱâ À§Çؼ­ ÇÊ¿äÇÑ ÀÛ¾÷ÀÌ´Ù. À̰ÍÀº ¾îµð±îÁö³ª µ¥ÀÌÅÍÀÇ Á߿䵵¿Í º¸¾È Á¤Ã¥¿¡ °ü·ÃµÈ »çÇ×À¸·Î °³¹ßÀÚ³ª °ü¸®ÀÚµéÀÌ °í¹ÎÇÏ¿© »ç¿ëÇϱ⠹ٶõ´Ù.

º¸¾È °³³äÀ» ½Ç¹«¿¡ Àû¿ëÇÏÀÚ
Áö±Ý±îÁö ÀÎÅͳݿ¡¼­ÀÇ º¸¾È À§Ç輺°ú ¿©·¯ °¡Áö ¹®Á¦Á¡À» »ìÆìº¸°í ÀÌ·¯ÇÑ À§Çù¿¡ ´ëÇÑ ´ëÃ¥À» ¾Ë¾Æº¸¾Ò´Ù. ±×·¯³ª ÀÌ·¯ÇÑ ¹æ¹ýÀº °áÄÚ ¿ÏÀüÇÑ ÇØ°áÃ¥ÀÌ ¾Æ´Ï´Ù. º¸¾È ÇÁ·ÎÅäÄÝ Áß¿¡¼­ ÇÙ½É ³»¿ë¸¸À» »ç¿ëÇÏ¿´±â ¶§¹®¿¡ »ç¼ÒÇÑ º¸¾È ÇãÁ¡ÀÌ ÀÖÀ» ¼ö ÀÖÀ¸¸ç ȣȯ¼ºÀ» °¡ÁöÁö ¸øÇÑ´Ù. °á±¹ ÇÑÁ¤µÈ ÀÚ¿ø¸¸À» º¸È£ÇÏ´Â °ÍÀ̱⠶§¹®¿¡ ±ÝÀ¶À̳ª Áõ±Ç ¾÷°è¿¡¼­´Â Àû¿ëÀÌ ºÒ°¡´ÉÇϰÚÁö¸¸ ÀÏ¹Ý ³×Æ®¿öÅ© ÀÀ¿ë ¼­ºñ½º¿¡¼­´Â ±× ¿ªÇÒÀ» ÃæºÐÈ÷ ´ÙÇÒ °ÍÀ¸·Î »ý°¢ÇÑ´Ù.

Á¤¸® | Á¶±ÔÇü | jokyu@korea.cnet.com


OpenSSL ÇÁ·ÎÁ§Æ®¿¡¼­ Á¦°øµÇ´Â
¾ÏÈ£ ¾Ë°í¸®Áò ¹× º¸¾È ÇÁ·ÎÅäÄÝ

¡ß ¹öÀü : 0.9.7(2002.12)
¡ß Áö¿ø ¾ÏÈ£ ¾Ë°í¸®Áò
- Block ciphers : AES, 3DES, DES, DESX, CAST, RC2, RC5, IDEA, Blowfish
- Stream ciphers : RC4
- Hash : MD2, MD4, MD5, SHA-1, RIPEMD 160, MDC2
- Asymmetric cryptosystems : RSA, DSA, DH, Elliptic curves
- MAC : HMAC
¡ß Standards Implemented
- PKCS1, PKCS7, PKCS8, PKCS10, PKCS12
- X509v3
- SSLv2, SSLv3 and TLSv1

Âü+°í+ÀÚ+·á

? http://www.openssl.org
? http://www.shininglightpro.com
? Network Security with OpenSSL, ¿À¶óÀϸ®
? ÄÄÇ»ÅÍ Åë½Åº¸¾È, ±×¸°
? ÄÄÇ»ÅÍ ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö, ±èÈ­Á¾
? H.235 v2, ¡°Security and encryption for H-Series(H.323 and other H.245-based) multimedia terminals¡±, ITU-T, 2000



        
aboutmenu