1.DES¾ÏÈ£È ½Ã½ºÅÛ°ú RSA°ø°³ ¾ÏÈ£È ½Ã½ºÅÛÀÇ Â÷ÀÌÁ¡ DES¾ÏÈ£È ½Ã½ºÅÛ DES´Â ¼Û½ÅÀÚ¿Í ¼ö½ÅÀÚ¸¸ÀÌ ¾Ë°í ÀÖ´Â µ¿ÀÏÇÑ ´ëĪ۸¦ ÀÌ¿ëÇÏ¿© ¸Þ½ÃÁö¸¦ ¾ÏÈ£ÈÇÏ°í º¹È£ÈÇϰí ÀÖ´Ù. <¹®Á¦Á¡> ¨ç ŰÀÇ »çÀüºÐ¹è ¹®Á¦ - ´Üü¿Í ±â¾÷°°Àº Æó¼âÀûÀÎ »ç¿ëÀÚµéÀº ¿ëÀÌÇϳª ÀÎÅͳݰ°Àº °³¹æÇü ½Ã½ºÅÛ¿¡¼´Â µ¿ÀÏÇÑ ´ëĪ۸¦ °íÀ¯ÇÏ´Â °ÍÀÌ À§Ç輺ÀÌ ÀÕ´Ù. ¨è ¿©·¯ »ç¿ëÀÚ¿Í »ç¿ëÇÏ·Á¸é ¸¹Àº ¼öÀÇ(n*(n-1)/2)ÀÇ ´ëĪ۰¡ ÇÊ¿äÇÏ°Ô µÇ°í ´ëĪŰÀÇ »ý¼º°ú ºÐ¹è´Â ½Ã½ºÅÛÀÇ È¿¿ï¼ºÀ» ÀúÇϽÃ۰í, ¸¹Àº ¼öÀÇ ´ëĪŰÀÇ À¯Áö, °ü¸®°¡ ¾î·Æ´Ù. RSA°ø°³
¾ÏÈ£½Ã½ºÅÛ ¨ç ¼·Î ¿¬°ü¼ºÀÌ ÀÖ´Â »óÀÌÇÑ µÎ °³ÀÇ Å°¸¦ °¢°¢ ¾ÏÈ£È¿Í º¹È£È¿¡ ÀÌ¿ë ¨è ¼Û½ÅÀÚ´Â ¸Þ½ÃÁö mÀ» °ø°³Å°·Î ¾ÏÈ£ÈÇÏ¿© ¼ö½ÅÀÚ¿¡°Ô º¸³»¸é ¼ö½ÅÀÚ´Â Àڱ⸸ÀÌ ¾Ë°í ÀÖ´Â °³ÀÎŰ·Î º¹È£È ÇÔ ¨é ¸ðµç »ç¿ëÀÚ´Â Àڱ⸸ÀÇ ÇѽÖÀÇ °ø°³Å°¿Í °³ÀÎ۸¦ °¡Áö¸ç °ø°³Å°´Â Àڱ⿡°Ô ¸Þ½ÃÁö¸¦ º¸³»·Á´Â »ç¶÷¿¡°Ô ¸ðµÎ Á¦°øÇØ ÁÖ°í, °³ÀÎŰ´Â ÀڽŸ¸ÀÌ ¾Ë°í ÀÖ¾î¾ß ÇÔ ¨ê °ø°³Å° ¾ÏÈ£ ½Ã½ºÅÛÀº ŰÀÇ »çÀüºÐ¹è¹®Á¦¸¦ ÇØ°áÇϰí, µðÁöÅÐ ¼¸í°ú °°Àº »õ·Î¿î °³³äÀ» ÃâÇö½ÃÅ´
2. °ø°³Å° ¾ÏÈ£ ½Ã½ºÅÛÀº ÀϹæÇâ ÇÔ¼ö¸¦ ÀÌ¿ë ¨ç ÀϹæÇâ ÇÔ¼ö x°¡ ÁÖ¾îÁö¸é y=f(x)ÀÇ °è»êÀÌ ¿ëÀÌÇÑ ¹Ý¸é, y°¡ ÁÖ¾îÁ³À» ¶§ x¸¦ ±¸Çϱâ À§ÇÑ f(x)ÀÇ ¿ª ÇÔ¼ö¸¦ ±¸ÇÏ´Â °ÍÀÌ ºÒ°¡´ÉÇÑ ÇÔ¼ö f(x)¸¦ ¸»ÇÑ´Ù. ex) µÎ °³ÀÇ ¸Å¿ì Å« ¼Ò¼öÀÇ °ö p¿Í q°¡ ¸Å¿ì Å« ¼Ò¼öÀ̸é n=p*qÀÇ °è»êÀº ¿ëÀÌÇÑ ¹Ý¸é, ÇÕ¼º¼öÀÎ n¿¡¼ p¿Í q¸¦ ±¸ ÇÏ´Â °ÍÀÌ ¾ÆÁÖ ¾î·Á¿î ÀÛ¾÷ÀÌ´Ù. - RSA°ø°³ ¾ÏÈ£ ½Ã½ºÅÛ ¨è °ø°³Å° ¾ÏÈ£ ½Ã½ºÅÛÀº ÀÌ ÀϹæÇâ ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù. Áï °ø°³Å°·Î ¾ÏÈ£ÈÇÏ´Â °ÍÀº f(x)´Â ¿ëÀÌÇϰí, ¼ö½ÅÀÚ¸¸ÀÌ ¾Ë°í ÀÖ´Â ºñ¹ÐŰ´Â f(x)ÀÇ ¿ªÇÔ¼ö¸¦ ±¸ÇÏ´Â ºñ¹ÐÅë·ÎÀÇ ¿ªÇÒÀ» ÇÑ´Ù. - ºñ¹ÐÅë·Î ÀϹæÇâ ÇÔ¼ö
3. RSA°ø°³ ¾ÏÈ£ ½Ã½ºÅÛÀ» ±¸ÇöÇϱâ À§ÇÑ ¼öÇÐÀû ¾Ë°í¸®Áò ÃÖ´ë°ø¾à¼ö ¨ç a,b ¡ô z(½Ç¼ö)¿¡ ´ëÇØ a = (b * q) + rÀÌ´Ù. ¸¸¾à, r=0 À̸é b¸¦ aÀÇ ¾à¼ö ¶Ç´Â Àμö¶ó ÇÑ´Ù. b|a·Î Ç¥½Ã ¨è a,b,c ¡ô z¿¡ ´ëÇØ c|a, c|b À̸é c´Â a¿Í bÀÇ °ø¾à¼ö ¨é °ø¾à¼ö Áß °¡Àå Å«¼ö¸¦ ÃÖ´ë °ø¾à¼ö(Greatest Common Divisor)¶ó Çϰí, gcd(a,b)·Î Ç¥½Ã ¨ê ÀÓÀÇÀÇ Á¤¼ö p¡Ã2¿¡ ´ëÇÑ ¾à¼ö°¡ 1°ú p¹Û¿¡ ¾ø´Ù¸é p¸¦ ¼Ò¼ö(Prime)¶ó Çϰí, ±×·¸Áö ¾ÊÀ» °æ¿ì ÇÕ¼º¼ö(Composite)¶ó ÇÔ [Á¤ ¸®] ¨ç a|b, b|cÀ̸é a|cÀÌ´Ù. ¨è a|b, a|cÀ̸é a|(bx*cy)ÀÌ´Ù. ¨é p°¡ ¼Ò¼öÀ̰í p|(a*b)À̸é p|a ¶Ç´Â p|bÀÌ´Ù. À¯Å¬¸®µå
¾Ë°í¸®Áò(Euclidean algorithm) - ÃÖ´ë °ø¾à¼ö¸¦ ±¸ÇÏ´Â °¡Àå È¿¿ïÀûÀÎ ¹æ¹ý a¡ÃbÀÇ °ü°è¿¡ ÀÖ´Â ¾çÀÇÁ¤¼ö gcd(a,b)¸¦ ±¸ÇÏ´Â ¾Ë°í¸®Áò(java·Î ±¸Çö)
s = a; ex) a=252, b=198À̸é gcd(252,198)=? t = b; a=252=(198*1) + 54 while(t>0) { 198=(54*3) + 36 r = s % t; 54=(36*1)+18 s = t; 36=(18*2)+0 t = r; } ¡Å gcd(252,198) = 18ÀÌ´Ù.
È®ÀåµÈ À¯Å¬¸®µå ¾Ë°í¸®Áò À§¿¡¼ gcd(252,198)=18¿¡¼ 18À» °¡Áö°í 252¿Í 198À» ã¾Æ³¾ ¼ö ÀÖ´Ù. 18 = 54 - 1*36 = 54 - (198 - (3 *54)) = 4 * 54 - 198 = 4 ( 252 - 198 ) - 198 = 4 * 252 - 5 * 198 252¿Í 198À» ã¾Æ³¾¼ö ÀÖ´Ù. - ÀÌ ¾Ë°í¸®ÁòÀº RSA¾ÏÈ£ ½Ã½ºÅÛ¿¡¼ (°ø°³Å°*ºñ¹ÐŰ) mod ((p -1) * (q - 1)) = 1 ¿¡¼ °ø°³Å°¸¦ ±¸ÇØ ³¾ ¶§ »ç¿ëµÇ´Â ¾Ë°í¸®Áò ÀÌ´Ù. RSA¿¡¼ ¾²ÀÌ´Â Àü¹ÝÀûÀÎ Modulus¿¬»ê(mod) ¨ç ¾çÀÇ Á¤¼ö n¿¡ ´ëÇÏ¿© µÎ Á¤¼ö a,bÀÇ Â÷ a-b°¡ nÀÇ ¹è¼ö ÀÏ ¶§, Áï n|((a-b)À̸é a¿Í b´Â Modulus n¿¡ ÇÕµ¿À̶ó Çϰí a¡Õb (mod n)À¸·Î ³ªÅ¸³¿ ¶ÇÇÑ, Á¤¼ö a¸¦ nÀ¸·Î ³ª´©¾úÀ» ¶§ÀÇ ³ª¸ÓÁö´Â a mod n = r·Î Ç¥ÇöÇÑ´Ù. ±×·¯¹Ç·Î a mod n = rÀ̸é a¡Õb (mod n)ÀÌ ¸¸Á·µÈ´Ù. À̶§ rÀ» Modulus n¿¡ ´ëÇÑ aÀÇ À׿©ÇÏ ÇÑ´Ù. ¨è ÀÓÀÇ Á¤¼ö a´Â {0,1,2,3,¡¦,n-1} ÁßÀÇ ¾î´À ÇÑ Á¤¼ö¿Í Modulus n¿¡ ´ëÇÏ¿© ÇÕµ¿ÀÌ´Ù. ¨é Modulus¿¡¼ÀÇ °ö¼À»óÀÇ ¿ª¿ø(È®ÀåµÈ À¯Å¬¸®µå ¾Ë°í¸®ÁòÀ¸·Î ±¸ÇÑ´Ù.) a/b (mod n)°ú °°Àº ³ª´°¼ÀÀÇ °æ¿ì x * b ¡Õ 1 (mod n)ÀÎ x¸¦ ãÀ» ¼ö¸¸ ÀÖ´Ù¸é x = 1/b À̱⠶§¹®¿¡ a * x mod nÀÇ °ö¼ÀÀÌ °¡´ÉÇÏ´Ù. À̶§ x¸¦ bÀÇ °ö¼À»óÀÇ ¿ª¿øÀ̶ó°í ÇÑ´Ù. ex) 4/3 mod 5¿¡¼ x * 3 ¡Õ 1 (mod 5)ÀÎ x°¡ 2À̱⠶§¹®¿¡ 4/3 mod 5 = 4 * 2 ¡Õ 3 (mod 5) ÀÌ´Ù. ÇÏÁö¸¸, 0ÀÌ ¾Æ´Ñ ¸ðµç Á¤¼ö bÀÇ °ö¼À»óÀÇ ¿ªÈÍÀÌ Á¸ÀçÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. n°ú b°¡ ¼·Î ¼ÒÀÇ °ü°è¿¡ ÀÖÀ» °æ¿ì¿¡¸¸ bÀÇ °ö¼À»óÀÇ ¿ª¿øÀÌ Á¸ÀçÇÑ´Ù. ex) x * 5 mod 23 = 1¿¡¼ 5ÀÇ °ö¼À»óÀÇ ¿ª¿ø x´Â gcd(23,5)=1À» ±¸ÇÏ´Â °úÁ¤À» ÅëÇÑ "È®ÀåµÈ À¯Å¬¸®µå ¾Ë°í¸®Áò"À» ÅëÇØ ±¸ÇÑ´Ù. 23 = (5 * 4) + 3, 5 = (3 * 1) + 2, 3 = (2 * 1) + 1, 2 = (1 * 2) + 0 1 = 3 - 2 = 3 - (5 - 3) = 2(23 - (5 * 4)) - 5 = 2 * 23 - 9 * 5 µû¶ó¼ x = -9 = 23 - 9 = 14ÀÌ´Ù. ¿ÀÀÏ·¯ Á¤¸® nÀÌ ¼Ò¼öÀ̸é PI(n) = n -1ÀÌ µÈ´Ù. ¸¸¾à, nÀÌ µÎ ¼Ò¼ö p¿Í qÀÇ °öÀ̸é PI(n) = p * q - [(p - 1) + (q - 1) + 1] = (p - 1)(q - 1) ¡Å a ^ PI(n) mod n = 1 Fermat Á¤¸® p°¡ ¼Ò¼öÀ̰í, a¿Í p°¡ ¼·Î ¼ÒÀ̸é a ^ (p - 1) mod p = 1
4. ÀÌÁ¦±îÁöÀÇ ÀÌ·ÐÀ» ¹ÙÅÁÀ¸·Î RSA°ø°³ ¾ÏÈ£ ½Ã½ºÅÛÀÇ Å°°ªÀÇ ±¸Çö - RSA°ø°³Å° ¾ÏÈ£¿¡ »ç¿ëµÉ °ø°³Å° {N,E}¿Í °³ÀÎŰ{N,D}¸¦ »ý¼ºÇϱâ À§Çؼ´Â ¸ÕÀú ¸ðµç »ç¿ëÀÚµéÀº °¢°¢ ´ÙÀ½ÀÇ ÀÛ¾÷À» ¼öÇà ¨ç µÎ °³ÀÇ Å« ¼Ò¼ö p¿Í q¸¦ ¼±Á¤ÇÑ ´ÙÀ½¿¡ Modulus N = p * q¿Í PI(N)À» °è»êÇÑ´Ù. ¨è °ø°³Å° E´Â PI(N) = (p - 1)(q - 1)°ú ¼·Î ¼ÒÀÇ °ü°è°¡ µÇ°Ô ÀÓÀÇ·Î ¼±Á¤ ¨é E * D mon PI(N) = 1ÀÇ °ü°è¿¡ ÀÖ´Â °³ÀÎŰ D¸¦ "È®ÀåµÈ À¯Å¬¸®µå ¾Ë°í¸®Áò"À¸·Î ±¸ÇÑ´Ù. ¨ê {E,N}À» °ø°³Å°·Î °ø°³Çϰí, {D,N}À» °³ÀÎŰ·Î ÀÚ½ÅÀÌ ¾ÈÀüÇÏ°Ô º¸°üÇÑ´Ù. - RSA¾ÏÈ£È (¾ÏÈ£È ÇÏ·Á´Â ¼ö´Â M) E(M) = M ^ E mod N = C - RSAº¹È£È D(C) = C ^ D mod N = ((M ^ E) ^ D) mod N = M ex) n = p * q = 47 * 71 = 3337 °ø°³Å° e´Â (p - 1)(q - 1) = 46 * 70 = 3220°ú ¼·Î ¼ÒÀÇ °ü°è¿¡ ÀÖ´Â ÀÓÀÇÀÇ Á¤¼ö 79·Î ¼±Á¤ÇÑ´Ù. µû¶ó¼, °³ÀÎŰ´Â "È®ÀåµÈ À¯Å¬¸®µå ¾Ë°í¸®Áò" À» ÀÌ¿ëÇÏ¿© d = 1019°¡ µÈ´Ù. Æò¹® m = 688dÀº ¾ÏÈ£¹® c = 688 ^ 79 mod 3337 = 1570 À¸·Î ¾ÏȣȵȴÙ. °³ÀÎŰ d = 1019¸¦ »ç¿ëÇÏ¿© ´Ù½Ã ¾ÏÈ£¹® c = 1570Àº Æò¹® m = 1570 ^ 1019 mod 3337·Î º¹È£È°¡ µÈ´Ù.
5. Java·Î ±¸Çö½Ã ¶Ç ´Ù¸¥ ¹®Á¦Á¡ M ^ E mod NÀÇ °è»ê - ÀÌ °è»êÀº M°ú E°¡ ¾ÆÁÖ Å« ¼öÀ̸é ÇÁ·Î±×·¥ ¾ð¾î·Î ½ÇÁ¦·Î ±¸ÇöÇϴµ¥´Â ¹®Á¦°¡ »ý±â°Ô µÈ´Ù. ¡ñ float or doubleÇüÀº ¾ÏÈ£ÈÇÑ ¼ö¸¦ »êÃâÇÒ ¶§¿¡ Á¦ÇÑµÈ ÀÚ¸®¼ö¸¦ ÃʰúÇÏ°ÔµÇ¸é ¹Ý¿Ã¸² ÈÄ Áö¼öÀÇ ÇüÅ·Πǥ½ÃÇÏÁö ¶§¹®¿¡ longÇüÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. - °è»ê ½Ã°£ÀûÀ¸·Î ºñÈ¿À²ÀûÀÌ´Ù.("¹Ýº¹ Á¦°ö-°ö¼À"¾Ë°í¸®ÁòÀ» »ç¿ë)
¹Ýº¹ Á¦°ö-°ö¼À ¾Ë°í¸®Áò ¨ç ¿µÀÌ ¾Æ´Ñ e¿¡ ´ëÇØ¼ ÀÌ °ÍÀ» ÀÌ¿ëÇÏ·Á¸é ¸ÕÀú e¸¦ kºñÆ®ÀÇ 2Áø¼öÀÇ ÇüÅ·Πº¯ÇüÇÑ´Ù. ¨è eiÀÇ °ªÀÌ 0À̸é Á¦°ö, 1À̸é Á¦°ö-°ö¼ÀÀÇ ¿¬»êÀ» ¼öÇàÇÑ´Ù. ¨é ½ÇÁ¦Àû Java·Î ±¸Çö( ei´Â i¹øÂ° ºñÆ®ÀÇ °ªÀÌ´Ù.) z = 1; for(int i=k-1;i>=0;i++) { z = z ^ 2 mod n; if(ei == 1) z = (z * m) mod n; } return z;
È®·ãÀû ¼Ò¼ö ÆÇÁ¤¹ý(Miller-Rabin ¾Ë°í¸®Áò) - miller_rabin(n,k) n - 1 = (2 ^ s) * r¿¡¼ s¿Í rÀ» ±¸Çس½´Ù. boolean flag = true; for(int i= 1;i >= k;i++) { a = (long)(Math.random() * (n - 2)); y = a ^ r % n; if(y != 1 && y !=n-1) { j = 1; while(j<=s-1 && y != n-1) { y = y ^ 2 % n; if(y==1) flag = false; j++; } if(y!=n-1) flag = false; } } return flag; |