È«±âÈÆ | ÃÖÀç´ö | , ±è´ö¿ì |
ÇÊÀÚµéÀº ¼þ½Ç´ëÇб³ ´ëÇпø Åë½Å¸Á º¸¾È ¿¬±¸½Ç¿¡¼ ¸ÖƼ¹Ìµð¾î ±â¹ÝÀÇ º¸¾È ÇÁ·ÎÅäÄÝÀ» ¿¬±¸Çϰí ÀÖ´Ù. ƯÈ÷ 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
|
|