ããã«ã¡ã¯ ãã®èšäºã§ã¯ãã©ã®ããã«æ··ä¹±ãããã説æããŸãã å°æ°ã®æèãäœå¹Žãããªãã®é ãæãããããã«ããªãã®äººçã«åœ±é¿ãäžããããšãã§ããæ¹æ³ æ°å€ãå ç®ããã³ä¹ç®ããæ¹æ³ãmd5ãèšç®ããæ¹æ³ãããã³ãªã€ã©ãŒä»®èª¬ããæ°å€ãæ¢ãæ¹æ³ã説æããŸãã
ãã¹ãŠã®æäœãè«çãããã§å®è¡ããŸãããèšç®ã¯ããŸããã è«ççãªå€æ°ã®ã¿ã§åäœããèšç®ã®è€éãããéããç¡éã®æåŸ
ãäºæ³ããŸãã ãã®äžçã§ã¯ã2ã3ã®10ãããæ°ãã»ãšãã©ä¹ç®ã§ããªããšç¡åæãèŠããŸãã
第1ç« è¿œå
è¡ããŸãããã è¿œå ããå§ããŸãããã æ°å€ããããã®ã·ãŒã±ã³ã¹ãšããŠè¡šããŸã
$ã€ã³ã©ã€ã³$ {a0ãa1ãa2ãa3 ...}ã$ã€ã³ã©ã€ã³$
$ã€ã³ã©ã€ã³$ {b0ãb1ãb2ãb3 ...}ã$ã€ã³ã©ã€ã³$
$ã€ã³ã©ã€ã³$ {x0ãx1ãx2ãx3 ...}ã$ã€ã³ã©ã€ã³$
ã©ãã§
$ã€ã³ã©ã€ã³$ a0ãb0 $ã€ã³ã©ã€ã³$ -äœãããã
å€æ°ã®äž
$ã€ã³ã©ã€ã³$ x $ã€ã³ã©ã€ã³$ ç§ã¯æäœã®çµæãæå³ããŸãã
ãããã®æ°åãè¿œå ããŠã¿ãŸãããã åèšã®ãŒããããã¯äœã§ããïŒ ãããã
$ã€ã³ã©ã€ã³$ a0 $ã€ã³ã©ã€ã³$ ãããŠ
$ã€ã³ã©ã€ã³$ b0 $ã€ã³ã©ã€ã³$ çãã
$ã€ã³ã©ã€ã³$ x0 $ã€ã³ã©ã€ã³$ ãŒãã«ãªããããã§ãªããã°1ã«ãªããŸãã
$ã€ã³ã©ã€ã³$ x0 = a0 \ XOR \ b0 $ã€ã³ã©ã€ã³$ ã ããã«ãè«çæŒç®åã¯ã次ã®ããã«è²Žéãªã€ã³ã¿ãŒãããã¹ããŒã¹ãç¯çŽããããã«ç°¡åã«èšè¿°ãããŸãã
$ã€ã³ã©ã€ã³$ AND \ equiv $ã€ã³ã©ã€ã³$ *ã
$ã€ã³ã©ã€ã³$ãŸãã¯\ equiv $ã€ã³ã©ã€ã³$ +ã
ä»æåã®ãããã äž¡æ¹ã®ãŒããããã1ã«çããå ŽåããŒããããã«äŸåããæåã®ãããã«ããããè¿œå ãããŸãã ãã®ã³ã³ããŒãã³ãããã£ãªãŒããããšåŒã³ãŸãã åèšã§ãæåã®ãããã«åœ±é¿ãäžãã3ã€ã®ã³ã³ããŒãã³ãããããŸãã ããã¯
$ã€ã³ã©ã€ã³$ a1ãb1 $ã€ã³ã©ã€ã³$ ãããŠ
$ã€ã³ã©ã€ã³$ïŒa0 * b0ïŒ$ã€ã³ã©ã€ã³$ ã
ãããã®ã³ã³ããŒãã³ãã®1ã€ã1ã€ãŸãã¯3ã€ãã¹ãŠã«çããå Žåãæåã®ãããã¯1ã«çãããªããŸãã ããã¯æ¬¡ã®ããã«æžãããŠããŸãã
$ inline $ a1 * b1 *ïŒa0 * b0ïŒ+ïŒa1 * b1 *ïŒa0 * b0ïŒ+ a1 *ïŒb1 *ïŒa0 * b0ïŒ+ a1 * b1 *ïŒïŒa0 * b0ïŒ$ inline $ ã
ãã©ãŒ ç§ã¯ä»ãããæžãããã©ããããããããŸããã
䟿å®äžäžé
æŒç®ãå°å
¥ããŸãã
$ã€ã³ã©ã€ã³$ XOR3 $ã€ã³ã©ã€ã³$ -å¥æ°ã®åŒæ°ã1ã«çãããšãã«1ãè¿ããŸãã
次ã«ã2çªç®ã®ãããã ãã¹ãŠã¯åœŒãšåãã§ã-圌ã¯3ã€ã®ã³ã³ããŒãã³ãã«äŸåããŠããŸãïŒ
$ã€ã³ã©ã€ã³$ a2ãb2 $ã€ã³ã©ã€ã³$ ãããã³æåã®ãããããã®ãã£ãªãŒãããã çŸåšãæåã®ãããã®ãã£ãªãŒãããã¯3ã€ã®ã³ã³ããŒãã³ãã«äŸåããŠããŸãã
$ã€ã³ã©ã€ã³$ a1ãb1 $ã€ã³ã©ã€ã³$ ãããã³åã®ãã£ãªãŒãããã ããã3ã€ã®ã³ã³ããŒãã³ãã®ãã¡2ã€ã1ã«çããå Žåããã£ãªãŒãããã1ã«ãªããŸãã ãã®äžé
é¢æ°ã¯
$ã€ã³ã©ã€ã³$ AND3 $ã€ã³ã©ã€ã³$ ïŒ3ãããã®ãã¡2ãããã1ã«çããå Žåã1ãè¿ããŸãã åŒã¯ããåçŽã§ãïŒ
$ã€ã³ã©ã€ã³$ AND3ïŒaãbãcïŒ=ïŒa * bïŒ+ïŒa * cïŒ+ïŒb * cïŒã$ã€ã³ã©ã€ã³$
ããŠã次ã®ãããã¯2çªç®ã®ããããšåãæ¹æ³ã§æ±ºå®ãããŸãã ã«ãŒãã§ã¯ã次ã®ããã«ãªããŸãããã£ãªãŒããããã«ãŠã³ãããŸã
$ã€ã³ã©ã€ã³$ pïŒi-1ïŒ$ã€ã³ã©ã€ã³$ ãçµæããããèæ
®
$ã€ã³ã©ã€ã³$ xïŒiïŒ$ã€ã³ã©ã€ã³$
$ã€ã³ã©ã€ã³$ p2 = AND3ïŒa2ãb2ãp1ïŒ$ã€ã³ã©ã€ã³$
$ã€ã³ã©ã€ã³$ x3 = XOR3ïŒa3ãb3ãp2ïŒ$ã€ã³ã©ã€ã³$
$ã€ã³ã©ã€ã³$ p3 = AND3ïŒa3ãb3ãp2ïŒ$ã€ã³ã©ã€ã³$
...
ããã§ãæ°åãè¿œå ããæ¹æ³ãåŠã³ãŸããã
5ãããæ°ã®åèšã¯æ¬¡ã®ããã«ãªããŸã------------ããã0 -----------------
ïŒa0 * b0ãŸãã¯
a0 *ïŒb0
------------ããã1 -----------------
a0 * a1 * b0 * b1 OR
ïŒa1 *ïŒb0 * b1ãŸãã¯
ïŒa0 *ïŒa1 * b1 OR
a0 *ïŒa1 * b0 *ïŒb1 OR
a1 *ïŒb0 *ïŒb1 OR
ïŒa0 * a1 *ïŒb1
------------ããã2 -----------------
a0 * a2 * b0 * b1 * b2 OR
ïŒa1 * a2 *ïŒb0 *ïŒb2ãŸãã¯
ïŒa0 *ïŒa1 *ïŒa2 * b2ãŸãã¯
ïŒa2 *ïŒb0 *ïŒb1 * b2ãŸãã¯
ïŒa0 *ïŒa2 *ïŒb1 * b2ãŸãã¯
ïŒa0 *ïŒa1 * a2 *ïŒb2ãŸãã¯
a0 * a1 * a2 * b0 * b2 OR
a1 * a2 * b1 * b2ãŸãã¯
a2 *ïŒb0 *ïŒb1 *ïŒb2ãŸãã¯
ïŒa0 * a2 *ïŒb1 *ïŒb2ãŸãã¯
a0 * a1 *ïŒa2 * b0 *ïŒb2ãŸãã¯
ïŒa1 *ïŒa2 *ïŒb1 * b2ãŸãã¯
ïŒa1 *ïŒa2 *ïŒb0 * b2ãŸãã¯
ïŒa1 * a2 *ïŒb1 *ïŒb2ãŸãã¯
a0 *ïŒa2 * b0 * b1 *ïŒb2ãŸãã¯
a1 *ïŒa2 * b1 *ïŒb2
------------ããã3 -----------------
a2 * a3 * b2 * b3 OR
a2 *ïŒa3 * b2 *ïŒb3 OR
a3 *ïŒb0 *ïŒb1 *ïŒb2 *ïŒb3ãŸãã¯
ïŒa1 *ïŒa2 *ïŒa3 *ïŒb0 * b3ãŸãã¯
a0 * a1 * a2 *ïŒa3 * b0 *ïŒb3 OR
ïŒa3 *ïŒb0 *ïŒb1 *ïŒb2 * b3ãŸãã¯
ïŒa0 *ïŒa2 *ïŒa3 *ïŒb1 * b3ãŸãã¯
a1 * a3 * b1 * b2 * b3ãŸãã¯
a0 * a2 * a3 * b0 * b1 * b3ãŸãã¯
ïŒa0 *ïŒa1 *ïŒa3 *ïŒb2 * b3ãŸãã¯
ïŒa0 *ïŒa3 *ïŒb1 *ïŒb2 * b3ãŸãã¯
ïŒa0 *ïŒa1 * a3 *ïŒb2 *ïŒb3ãŸãã¯
ïŒa2 *ïŒa3 *ïŒb0 *ïŒb1 * b3ãŸãã¯
a0 * a1 * a3 * b0 * b2 * b3 OR
a0 * a1 * a2 * a3 * b0 * b3 OR
a0 * a2 *ïŒa3 * b0 * b1 *ïŒb3 OR
ïŒa1 *ïŒa3 *ïŒb1 *ïŒb2 * b3ãŸãã¯
ïŒa0 * a3 *ïŒb1 *ïŒb2 *ïŒb3ãŸãã¯
ïŒa2 * a3 *ïŒb0 *ïŒb1 *ïŒb3ãŸãã¯
ïŒa2 *ïŒa3 *ïŒb2 * b3ãŸãã¯
ïŒa1 * a3 *ïŒb0 *ïŒb2 *ïŒb3ãŸãã¯
a0 *ïŒa3 * b0 * b1 * b2 *ïŒb3 OR
ïŒa0 *ïŒa1 *ïŒa2 * a3 *ïŒb3 OR
ïŒa0 *ïŒa2 * a3 *ïŒb1 *ïŒb3ãŸãã¯
ïŒa1 *ïŒa2 *ïŒa3 *ïŒb1 * b3ãŸãã¯
ïŒa0 *ïŒa1 *ïŒa2 *ïŒa3 * b3ãŸãã¯
ïŒa2 * a3 *ïŒb2 *ïŒb3 OR
a0 * a1 *ïŒa3 * b0 * b2 *ïŒb3 OR
a1 *ïŒa3 * b1 * b2 *ïŒb3ãŸãã¯
a1 * a2 *ïŒa3 * b1 *ïŒb3ãŸãã¯
a0 * a3 * b0 * b1 * b2 * b3ãŸãã¯
ïŒa1 *ïŒa2 * a3 *ïŒb0 *ïŒb3ãŸãã¯
ïŒa1 *ïŒa3 *ïŒb0 *ïŒb2 * b3ãŸãã¯
ïŒa1 * a3 *ïŒb1 *ïŒb2 *ïŒb3ãŸãã¯
a1 * a2 * a3 * b1 * b3ãŸãã¯
ïŒa1 *ïŒa2 * a3 *ïŒb1 *ïŒb3
------------ããã4 -----------------
ïŒa0 *ïŒa2 *ïŒa3 * a4 *ïŒb1 *ïŒb4 OR
ïŒa0 *ïŒa3 * a4 *ïŒb1 *ïŒb2 *ïŒb4ãŸãã¯
a3 *ïŒa4 * b3 *ïŒb4 OR
a3 * a4 * b3 * b4 OR
ïŒa0 *ïŒa1 *ïŒa3 * a4 *ïŒb2 *ïŒb4ãŸãã¯
a0 * a2 *ïŒa4 * b0 * b1 * b3 *ïŒb4 OR
ïŒa2 *ïŒa3 *ïŒa4 *ïŒb2 * b4ãŸãã¯
a4 *ïŒb0 *ïŒb1 *ïŒb2 *ïŒb3 *ïŒb4ãŸãã¯
a0 * a1 * a2 * a3 * a4 * b0 * b4 OR
ïŒa2 *ïŒa4 *ïŒb2 *ïŒb3 * b4ãŸãã¯
ïŒa1 *ïŒa2 *ïŒa4 *ïŒb1 *ïŒb3 * b4ãŸãã¯
ïŒa1 * a4 *ïŒb1 *ïŒb2 *ïŒb3 *ïŒb4ãŸãã¯
ïŒa1 *ïŒa3 *ïŒa4 *ïŒb0 *ïŒb2 * b4ãŸãã¯
a0 * a1 * a2 * a3 *ïŒa4 * b0 *ïŒb4 OR
ïŒa1 *ïŒa2 *ïŒa3 *ïŒa4 *ïŒb0 * b4ãŸãã¯
a1 * a3 * a4 * b1 * b2 * b4ãŸãã¯
a2 * a4 * b2 * b3 * b4ãŸãã¯
a0 *ïŒa4 * b0 * b1 * b2 * b3 *ïŒb4 OR
ïŒa2 * a4 *ïŒb0 *ïŒb1 *ïŒb3 *ïŒb4ãŸãã¯
a0 * a4 * b0 * b1 * b2 * b3 * b4 OR
ïŒa0 *ïŒa1 *ïŒa3 *ïŒa4 *ïŒb2 * b4ãŸãã¯
a0 * a1 * a3 *ïŒa4 * b0 * b2 *ïŒb4 OR
a1 * a2 * a3 * a4 * b1 * b4ãŸãã¯
a1 * a2 *ïŒa4 * b1 * b3 *ïŒb4 OR
a0 * a2 * a3 * a4 * b0 * b1 * b4 OR
a2 *ïŒa4 * b2 * b3 *ïŒb4ãŸãã¯
a0 * a1 * a2 *ïŒa4 * b0 * b3 *ïŒb4 OR
ïŒa0 *ïŒa4 *ïŒb1 *ïŒb2 *ïŒb3 * b4ãŸãã¯
ïŒa1 *ïŒa2 *ïŒa3 * a4 *ïŒb0 *ïŒb4ãŸãã¯
ïŒa0 *ïŒa1 * a4 *ïŒb2 *ïŒb3 *ïŒb4ãŸãã¯
ïŒa0 *ïŒa1 *ïŒa2 *ïŒa3 * a4 *ïŒb4 OR
a0 * a1 *ïŒa4 * b0 * b2 * b3 *ïŒb4 OR
a1 * a2 * a3 *ïŒa4 * b1 *ïŒb4 OR
a1 * a2 * a4 * b1 * b3 * b4ãŸãã¯
ïŒa1 *ïŒa2 *ïŒa3 *ïŒa4 *ïŒb1 * b4ãŸãã¯
ïŒa4 *ïŒb0 *ïŒb1 *ïŒb2 *ïŒb3 * b4ãŸãã¯
a1 * a3 *ïŒa4 * b1 * b2 *ïŒb4 OR
a0 * a1 * a3 * a4 * b0 * b2 * b4 OR
ïŒa2 *ïŒa3 *ïŒa4 *ïŒb0 *ïŒb1 * b4ãŸãã¯
ïŒa1 *ïŒa2 * a4 *ïŒb0 *ïŒb3 *ïŒb4ãŸãã¯
ïŒa0 *ïŒa1 *ïŒa2 *ïŒa4 *ïŒb3 * b4ãŸãã¯
ïŒa0 *ïŒa1 *ïŒa2 * a4 *ïŒb3 *ïŒb4ãŸãã¯
a2 * a3 * a4 * b2 * b4ãŸãã¯
ïŒa1 *ïŒa3 * a4 *ïŒb1 *ïŒb2 *ïŒb4ãŸãã¯
ïŒa3 *ïŒa4 *ïŒb3 * b4ãŸãã¯
a0 * a1 * a4 * b0 * b2 * b3 * b4 OR
ïŒa1 *ïŒa4 *ïŒb1 *ïŒb2 *ïŒb3 * b4ãŸãã¯
ïŒa0 *ïŒa3 *ïŒa4 *ïŒb1 *ïŒb2 * b4ãŸãã¯
ïŒa1 *ïŒa3 *ïŒa4 *ïŒb1 *ïŒb2 * b4ãŸãã¯
a2 * a3 *ïŒa4 * b2 *ïŒb4ãŸãã¯
ïŒa2 *ïŒa3 * a4 *ïŒb2 *ïŒb4ãŸãã¯
a0 * a3 *ïŒa4 * b0 * b1 * b2 *ïŒb4 OR
a1 *ïŒa4 * b1 * b2 * b3 *ïŒb4 OR
a0 * a3 * a4 * b0 * b1 * b2 * b4 OR
ïŒa2 *ïŒa3 * a4 *ïŒb0 *ïŒb1 *ïŒb4ãŸãã¯
ïŒa1 * a4 *ïŒb0 *ïŒb2 *ïŒb3 *ïŒb4ãŸãã¯
ïŒa1 *ïŒa2 *ïŒa3 * a4 *ïŒb1 *ïŒb4ãŸãã¯
ïŒa3 * a4 *ïŒb0 *ïŒb1 *ïŒb2 *ïŒb4ãŸãã¯
ïŒa1 *ïŒa3 * a4 *ïŒb0 *ïŒb2 *ïŒb4ãŸãã¯
ïŒa3 *ïŒa4 *ïŒb0 *ïŒb1 *ïŒb2 * b4ãŸãã¯
ïŒa0 * a4 *ïŒb1 *ïŒb2 *ïŒb3 *ïŒb4ãŸãã¯
a1 * a4 * b1 * b2 * b3 * b4ãŸãã¯
ïŒa0 *ïŒa2 * a4 *ïŒb1 *ïŒb3 *ïŒb4ãŸãã¯
ïŒa0 *ïŒa1 *ïŒa4 *ïŒb2 *ïŒb3 * b4ãŸãã¯
ïŒa0 *ïŒa1 *ïŒa2 *ïŒa3 *ïŒa4 * b4ãŸãã¯
ïŒa1 *ïŒa2 *ïŒa4 *ïŒb0 *ïŒb3 * b4ãŸãã¯
ïŒa2 * a4 *ïŒb2 *ïŒb3 *ïŒb4ãŸãã¯
ïŒa0 *ïŒa2 *ïŒa4 *ïŒb1 *ïŒb3 * b4ãŸãã¯
ïŒa2 *ïŒa4 *ïŒb0 *ïŒb1 *ïŒb3 * b4ãŸãã¯
a0 * a2 * a4 * b0 * b1 * b3 * b4 OR
ïŒa0 *ïŒa2 *ïŒa3 *ïŒa4 *ïŒb1 * b4ãŸãã¯
ïŒa3 * a4 *ïŒb3 *ïŒb4 OR
ïŒa1 *ïŒa4 *ïŒb0 *ïŒb2 *ïŒb3 * b4ãŸãã¯
a0 * a2 * a3 *ïŒa4 * b0 * b1 *ïŒb4ãŸãã¯
ïŒa1 *ïŒa2 * a4 *ïŒb1 *ïŒb3 *ïŒb4ãŸãã¯
a0 * a1 * a2 * a4 * b0 * b3 * b4
------------ããã5 -----------------
a0 * a1 * a4 * b0 * b2 * b3ãŸãã¯
a2 * a3 * b2 * b4 OR
a1 * a2 * a3 * a4 * b1 OR
a2 * b2 * b3 * b4ãŸãã¯
a0 * a1 * a3 * a4 * b0 * b2ãŸãã¯
a0 * a4 * b0 * b1 * b2 * b3ãŸãã¯
a1 * a4 * b1 * b2 * b3ãŸãã¯
a0 * a2 * b0 * b1 * b3 * b4 OR
a1 * a3 * b1 * b2 * b4ãŸãã¯
a2 * a4 * b2 * b3ãŸãã¯
a0 * a1 * a2 * b0 * b3 * b4 OR
a0 * b0 * b1 * b2 * b3 * b4ãŸãã¯
a0 * a1 * a3 * b0 * b2 * b4 OR
a0 * a1 * b0 * b2 * b3 * b4 OR
a1 * a2 * a3 * b1 * b4 OR
a4 * b4 OR
a2 * a3 * a4 * b2 OR
a0 * a1 * a2 * a3 * b0 * b4 OR
a1 * a2 * b1 * b3 * b4ãŸãã¯
a1 * a2 * a4 * b1 * b3ãŸãã¯
a3 * a4 * b3ãŸãã¯
a0 * a1 * a2 * a3 * a4 * b0ãŸãã¯
a1 * b1 * b2 * b3 * b4ãŸãã¯
a1 * a3 * a4 * b1 * b2ãŸãã¯
a0 * a3 * a4 * b0 * b1 * b2ãŸãã¯
a0 * a2 * a3 * b0 * b1 * b4 OR
a0 * a3 * b0 * b1 * b2 * b4 OR
a0 * a2 * a3 * a4 * b0 * b1ãŸãã¯
a0 * a1 * a2 * a4 * b0 * b3 OR
a3 * b3 * b4ãŸãã¯
a0 * a2 * a4 * b0 * b1 * b3
ã¯ãããã®æ°åã«ã¯ãã1ã€ãããŸããæ°åã®åèšã1ã€ã®æ°ããããããäžããããšãã§ããŸãã
ããããéã®åãããã«éåžžã«å€ãã®ã¡ã³ããŒããã0ïŒ2
ããŒã1ïŒ6
ããŒã2ïŒ16
ããŒã3ïŒ36
ããŒã4ã§ïŒ76
ããŒã5ïŒ156
ããŒã6ïŒ316
ããŒã7ïŒ636
8æïŒ1276
ããã9ïŒ2556
ããã10ïŒ1023
çšèªãšã¯ãåŒãéžèšæšæºåœ¢ã«çž®å°ãããåŸã®çšèªãæå³ããŸãïŒåãçšèªãæãã€ããïŒãèšãæãããšã圢åŒã«çž®å°ããåŸã5ãããã®åèšãäžã«æžã蟌ãŸããŸãã
第2ç« ä¹ç®
第2ç« ãä¹ç®ã ç§ãã¡ã¯è¿œå ããããšãåŠãã ã®ã§ããããå¢ããããšãã§ããŸãïŒ ã¯ããåŠæ ¡ã§æããããŠããããã«ã2é²æ°ã®ã¿ã®ã³ã©ã ã§ãã ã«ãŒãã§ã¯ã次ã®ããã«ãªããŸãã第1ãªãã©ã³ãã«ããããåäœã§ã·ããããã第2ãªãã©ã³ããè¿œå ããŸãã
$ã€ã³ã©ã€ã³$ i $ã€ã³ã©ã€ã³$ ããããåãããã§ä¹ç®
$ã€ã³ã©ã€ã³$ i $ã€ã³ã©ã€ã³$ 第1ãªãã©ã³ãã®ç¬¬1ãããã ã©ãããããã¯æ¬äŒŒã³ãŒãã§ããæ確ã«èŠããã§ãããïŒ
var big, small // for (int i = 0; i < small.bits.size(); i++ ) { var big_tmp = big; for (int j = 0; j < big.bits.size(); j++) { big_tmp.bits[j] = big.bits[j] * small.bits[i]; } result = (result + big_tmp.operator_SHIFT_LEFT(i)); }
é·ãmãšnãããã®æ°ãä¹ç®ãããšãé·ãm + nãããã®æ°ã«ãªããŸãã
ä¹ç®ã®çµæãåçŽåããã«ã¯å€ãã®ãªãœãŒã¹ãå¿
èŠã§ãããéåžžã«å€é
åŒã«èŠããŸãã3ãããæ°ã®ç©ã¯æ¬¡ã®ãšããã§ãã
ã·ã§ãŒ------------ããã0 -----------------
a0 * b0
------------ããã1 -----------------
a1 * b0 *ïŒb1 OR
ïŒa0 * a1 * b0ãŸãã¯
a0 *ïŒb0 * b1ãŸãã¯
a0 *ïŒa1 * b1
------------ããã2 -----------------
ïŒa0 *ïŒa1 * a2 * b0ãŸãã¯
a0 *ïŒb0 *ïŒb1 * b2ãŸãã¯
a0 *ïŒa1 *ïŒb0 * b2ãŸãã¯
a0 * a1 * a2 * b0 * b1 *ïŒb2 OR
a0 *ïŒa2 *ïŒb1 * b2ãŸãã¯
ïŒa0 * a1 *ïŒa2 * b1 OR
a0 *ïŒa2 * b0 * b2ãŸãã¯
a0 *ïŒa1 *ïŒa2 * b2ãŸãã¯
a2 * b0 *ïŒb1 *ïŒb2ãŸãã¯
a1 *ïŒb0 * b1 *ïŒb2ãŸãã¯
ïŒa1 * a2 * b0 *ïŒb2 OR
ïŒa0 * a2 * b0 *ïŒb1 OR
ïŒa0 * a1 *ïŒb0 * b1
------------ããã3 -----------------
ïŒa0 * a1 * b0 * b2 OR
a0 * a1 * a2 *ïŒb0 * b1 * b2ãŸãã¯
ïŒa1 * a2 * b1 *ïŒb2 OR
a2 *ïŒb0 * b1 *ïŒb2ãŸãã¯
a0 *ïŒa1 * a2 * b0 *ïŒb1 * b2ãŸãã¯
ïŒa0 * a1 *ïŒa2 * b2 OR
a1 *ïŒb0 *ïŒb1 * b2ãŸãã¯
ïŒa0 *ïŒa1 * a2 * b1 OR
a1 *ïŒa2 *ïŒb1 * b2ãŸãã¯
a0 * a1 *ïŒa2 * b0 * b1 *ïŒb2ãŸãã¯
ïŒa1 * a2 *ïŒb0 * b1 OR
ïŒa0 * a1 *ïŒb1 * b2
------------ããã4 -----------------
ïŒa0 *ïŒa1 * a2 * b2ãŸãã¯
ïŒa1 * a2 *ïŒb1 * b2ãŸãã¯
a0 * a1 * a2 * b0 * b1 * b2ãŸãã¯
a2 *ïŒb0 *ïŒb1 * b2ãŸãã¯
ïŒa1 * a2 *ïŒb0 * b2ãŸãã¯
a0 * a1 *ïŒa2 *ïŒb0 * b1 * b2ãŸãã¯
ïŒa0 * a2 *ïŒb1 * b2ãŸãã¯
a1 * a2 * b0 * b1 *ïŒb2 OR
a0 * a1 *ïŒa2 * b0 * b1 * b2
------------ããã5 -----------------
a0 * a1 * a2 * b0 *ïŒb1 * b2 OR
a1 * a2 *ïŒb0 * b1 * b2ãŸãã¯
a1 * a2 * b0 * b1 * b2ãŸãã¯
a0 *ïŒa1 * a2 * b0 * b1 * b2
ãããã6x6ããŒã¹ã®ãããã«å«ãŸããã¡ã³ããŒã®æ°ããã0ïŒ1
ããŒã1ïŒ4
ããŒã2ïŒ13
ããŒã3ïŒ41
ããŒã4ïŒ168
ããŒã5ïŒ656
ããŒã6ïŒ791
ããŒã7ïŒ778
ããŒã8ïŒ606
ããã9ïŒ402
ããŒã10ã§ïŒ240
11æ135å
ããããããã¯ãé¢åãªè€æ°éã®åŒãä¹ç®ããåçŽåããããã®ãªãã·ã§ã³ã®1ã€ã«ãããŸããã äžäœãããã®ä»ã®å€ãååŸããå ŽåããããŸãããããã¯è«çåŒãã©ãã ãåçŽåã§ãããã«äŸåããŸãã
ãããã£ãŠãå ç®ãšä¹ç®ãè¡ãããšãã§ããŸãã ç¹å¥ãªèšç®ã³ã¹ããªãã§ååž°åŒãååŸã§ããŸããããã«ãããåèšãç©ããŸãã¯æ°å€ã«é¢ãããã®ä»ã®è€åæŒç®ãèæ
®ãããŸãã ããããå€æããããã«ã蚱容ã§ããæéå
ã«10ããããè¶
ããæ°å€ã®å Žåããã®åŒãåçŽåããããšã¯ã§ããŸããã 8x8ããŒã¹ã®è¡šçŸãåçŽåããããšã¯ã»ãšãã©ã§ããŸããã§ããã
ãã®æ®µéã§ãç§ã¯æåã®ãã©ãã«ã«ééããŸããã å°ããªæ³šæã®åçŽåãããäœåãèŠãŠãããçš®ã®äŸåé¢ä¿ãèŠã€ãããã®ãããªå
¬åŒãæ§ç¯ããããšãåŠã¶ããšã¯å¯èœã§ããïŒ
å ç®ãšä¹ç®ã®çµæãšããŠãaãšbã«é¢ããŠå¯Ÿç§°æ§ããªããã°ãªããŸãããäžäœãããã§ã¯èçŒã§èŠãããšãã§ããäžäœãããã§èŠãããã«ã¯ç®ãæŠè£
ããªããã°ãªããŸããã
ã ãããæäžäœããããèŠãããšã§å ç®/ä¹ç®ã®æäžäœãããã®åŒãæ§ç¯ããããšã¯å¯èœã§ããïŒ ç§ã¯æåããŸããã§ãã
ããããã³ã€ã³ã«ã¯è£è¿ãããããŸããåçŽåãããåŒã¯ééããªãå€ãã®ã¹ããŒã¹ãå æããããã2ã€ã®1024ãããæ°ã®ç©ãåçŽåããã®ã¯æå³ããããŸããã ãããã誰ãã1024ãããïŒç¹ã«çŽ æ°ïŒã®æ°å€ãä¹ç®ããããšã«èå³ããããŸãããïŒ ãã¹ããããè«çåŒãæäœããããšãåŠã¶å¿
èŠããããŸãã
äºãã«åã蟌ãŸãããã®ãå«ãéžèšçæšæºåœ¢ã«çž®å°ãããè«çåŒã§åäœããå°ããªã³ãŒããæžãããšã¯é£ãããããŸããã§ããã ãŸããç§ã¯é£²é
ããããããã°ã©ãã³ã°ãåŠã³ãä»äºããããå¿
èŠããããŸããã
第3ç« ãæãèå³æ·±ã
md5ãäŸã«ãšããŸãã 64åãã©ãŠã³ãã«ã€ããŠéå±ã èšç®ã§ã¯ãéåžžã®è«çæŒç®åãšäžèšã®åèšã®ã¿ã䜿çšãããŸãã 32ããå€ããããã®ã¿ãç Žæ£ãããŸãã ããŠããã¹ãããããããåŒã䜿çšããŠmd5ãèšç®ã§ããŸãã
倧äœãã®ããã«èŠããŸãã
ããšãã°ãå
¥åmd5ã¯128åã®è«çå€æ°ã§ãã ãã¹ããããå€æ°ãtãšåŒã³ãã¡ã€ã³å€æ°ã®åŸã«çªå·ãä»ãå§ããŸãã ãã®å Žåãã¡ã€ã³å€æ°ïŒmd5é¢æ°ã®å
¥åã«äŸçµŠãããå€æ°ïŒã¯ã
$ã€ã³ã©ã€ã³$ x0 $ã€ã³ã©ã€ã³$ åã«
$ã€ã³ã©ã€ã³$ x127 $ã€ã³ã©ã€ã³$ ããã¹ãããããã®ã¯
$ã€ã³ã©ã€ã³$ t128 $ã€ã³ã©ã€ã³$ ã 次ã«ãçµæã®æåã®ãããã¯ãã®ãããªãã®ã«ãªããŸãïŒãã¹ãŠã¢ã«ãŽãªãºã ã®ã©ã®ãã€ã³ãã§åŒãtå€æ°ã«æãç³ããã«ãã£ãŠç°ãªããŸãïŒã
ããšãã°ãmd5 [0] =
t67168 * t70255ãŸãã¯
t67167 * t70255ãŸãã¯
t67163 * t67169 * t70255ãŸãã¯
ïŒt65928 *ïŒt65929 *ïŒt65930 * t65936 * t67155 * t67169 * t70255ãŸãã¯
t65929 * t65937 * t67155 * t67169 * t70255ãŸãã¯
ïŒt65928 *ïŒt65929 *ïŒt65930 * t65938 * t67155 * t67169 * t70255ãŸãã¯
t65928 * t65937 * t67155 * t67169 * t70255ãŸãã¯
t65929 * t65939 * t67155 * t67169 * t70255ãŸãã¯
t65928 * t65939 * t67155 * t67169 * t70255ãŸãã¯
t67162 * t67169 * t70255ãŸãã¯
t67166 * t70255ãŸãã¯
t65937 * t65930 * t67155 * t67169 * t70255ãŸãã¯
t65930 * t65939 * t67155 * t67169 * t70255
ããã§ãåtå€æ°ã¯ç°ãªãåŒã§ãã
ãããŠããã§ãŒã³ã®çµããã«ãã®ãããªãã®t219 =
ïŒx6 * t139 * t217ãŸãã¯
ïŒx6 * t140 * t217ãŸãã¯
t211 *ïŒt135 * t217ãŸãã¯
ïŒx6 * t211 * t217ãŸãã¯
ïŒx10 * t139 * t217ãŸãã¯
ïŒx10 * t211 * t217ãŸãã¯
ïŒx8 * t211 * t217ãŸãã¯
ïŒx8 * t139 * t217ãŸãã¯
ïŒx9 * t140 * t217ãŸãã¯
ïŒx8 * t140 * t217ãŸãã¯
ïŒx9 * t139 * t217ãŸãã¯
ïŒx10 * t140 * t217ãŸãã¯
ïŒt135 * t140 * t217ãŸãã¯
ïŒx9 * t211 * t217ãŸãã¯
ïŒt135 * t139 * t217
...
t128 =
x0ãŸãã¯
x5 OR
x6 OR
x4 OR
x8 OR
x7 OR
x9 OR
x3 OR
x10 OR
x2 OR
x1
ãåãã®ãšããã128ãããã®md5é¢æ°ã®è€éãã¯ããã70,000ã«çãããããçµæãšããŠã70,000ã®tå€æ°ãåŸãããŸãã å€æãããšããã15ã256ã347ããŸãã¯512ã®å€æ°ãå
¥åã«é©çšãããšããã¹ãïŒã€ãŸããtå€æ°ã®æ°ïŒã¯ã»ãŒåãã«ãªããŸãã ããã§éèŠãªäºçŽãããå¿
èŠããããŸãã è«çåŒã®èšç®äžã«tå€æ°ãäœæããæäœã¯ãè«çæŒç®åã®åŸã«é©çšãããŸã
$ã€ã³ã©ã€ã³$ããã³$ã€ã³ã©ã€ã³$ ãããŠ
$ã€ã³ã©ã€ã³$ AND3 $ã€ã³ã©ã€ã³$ åŸ
$ã€ã³ã©ã€ã³$ãŸãã¯$ã€ã³ã©ã€ã³$ ãããŠ
$ã€ã³ã©ã€ã³$ XOR3 $ã€ã³ã©ã€ã³$ åçŽåãå®è¡ããããã®ãããªçµæãåŸãããŸãã
ãããã£ãŠãmd5ã®ãã¹ããããè€éãã¯70Kã§ãã åãããã®tå€æ°ã®çµæã®åŒã¯ãè«çè¡šçŸå€æ°ãšåŒã°ããŸãã
ãããŠä»ã 次ã«ã次ã®ããšãè¡ããŸãã ããã·ã¥ãååŸããããã圢åŒã§è¡šããŸãã ããã·ã¥ãããã0ã®å Žåã察å¿ããè«çè¡šçŸå€æ°ãååŸããŸãã1ã¯å転ããŸãïŒæŒç®å
$ã€ã³ã©ã€ã³$ NOT $ã€ã³ã©ã€ã³$ ïŒ ãããŠãããããæŒç®åã«è¿œå ããŸã
$ã€ã³ã©ã€ã³$ãŸãã¯$ã€ã³ã©ã€ã³$ ã ãã®çµæãæ°ãããã¹ããããè«çåŒãååŸããããã
$ã€ã³ã©ã€ã³$ FALSE $ã€ã³ã©ã€ã³$ ã
ãã®è¡šçŸã¯ã©ãããæå³ã§ããïŒ ãããŠãããã¯äžããããããã·ã¥ã«å¯ŸããŠå¯èœãªãã¹ãŠã®è§£æ±ºçã説æããŠããŸãã ãŸããtå€æ°ã眮ãæããŠåçŽåãããšããœãªã¥ãŒã·ã§ã³ãå®å
šã«è¡šç€ºãããŸãã ããã¯åã«åçŽåããã ãã§æ©èœããŸããã ãã®æ®µéã§ã¯ãé«å質ã®ãªããã·ãŒã©ãŒã賌å
¥ããå¿
èŠããããŸããã
ãŸãããããåçŽåããããšã¯ã§ããŸããããå°ãªããšã1ã€ã®å¯èœãªè§£æ±ºçãèŠãèŠããããšã¯ãå°ãªããšãããªãã®ç®ã®åã§ã¯ã§ããŸãããå®éããªããã¹ãŠãå¿
èŠãªã®ããå°ãªããšã1ã€ãå¿
èŠã§ã... 次ãšçããè«çåŒããããŸã
$ã€ã³ã©ã€ã³$ FALSE $ã€ã³ã©ã€ã³$ ã ããã¯ãç°¡çŽ åã®ãã段éã§ãããã¡ã³ããŒã
$ã€ã³ã©ã€ã³$ TRUE $ã€ã³ã©ã€ã³$ ããã·ã¥ã«ã¯è§£æ±ºçããããŸããã åŒã®åçŽåãéå§ãããšãäœäººã®ã¡ã³ããŒãèªå·±ç Žå£ãã
$ã€ã³ã©ã€ã³$ FALSE $ã€ã³ã©ã€ã³$ ã ã€ãŸããtå€æ°ã代å
¥ããåŸã次ã®ããã«ãªããŸã
$ inline $ t67234 \ * \ïŒt67234 * ... $ inline $ ã€ãŸããã©ã®çšèªãåãã§ããããäºåã«ç¥ã£ãŠããã°
$ã€ã³ã©ã€ã³$ FALSE $ã€ã³ã©ã€ã³$ ããã®ãããªçšèªã§tå€æ°ã代å
¥ãããšããèšç®äžã®å°çãé¿ããããšãã§ããŸãã
ã ãããç§ã¯å³declareã«å®£èšããŸãã èšç®äžã®å°çã®èŠ³ç¹ãããã¹ããããè«çåŒã解ãåé¡ã¯ãåãããã«çããçšèªã®å®çŸ©ã«åž°çããŸã
$ã€ã³ã©ã€ã³$ FALSE $ã€ã³ã©ã€ã³$ ã 以äžã§ãã ãããè¡ããšãäœãèµ·ããããããããŸãã äžéšã®æå·ã¢ã«ãŽãªãºã ã¯ã«ããã£ã«ãªããŸãã 2ã€ã®256ãããæ°ãä¹ç®ãããã¹ãã®è€éãã¯ãçŽ500Kã512ããã-2Mã1024-8Mãªã©ã§ãã ã¯ããæ°åã®ä¹ç®ã¯åããã¹ãæ§é ã«ãªããŸãããããè€éã«ãªããŸãã
ãã®æ®µéã§ãç§ã¯ãªããã·ãŒã«æ©ã軜ãããããŸããã ããã€ãã®ã¢ã€ãã¢ãè©ŠããŠã¿ãŸãããã...ãŸã£ãã圹ã«ç«ã¡ãŸããã§ããã ãããŸã§ã®ãšãããäœããã®åœ¢ã§åœã®ã¡ã³ããŒãèå¥ããããšãã§ããå
åã¯èŠã€ãã£ãŠããŸããã ãã¶ãç§ã¯å°ãè©ŠããŸããã ãããŠãæšå®ãããã¯ãã§ã«è¿ãã®ã©ããã«ãã£ãããç§ã¯ãããèŠã€ããªãã£ããããã«å°éããªãã£ããããã¯would蟱ã«ãªãã ãã...ãããããããããããã¯ååã«è¡ãããšãç§ã®ã«ã«ãã§ãã ãã®ãããªãã®ã
PS
ããããã¹ãŠã§ãããäœããã€ã³ãã§ãããã«ã€ããŠã®çãåŸæžãã æ£çŽã«èšã£ãŠãäžèšã®ãã¹ãŠãç§åŠçãªæå³ãæã£ãŠããã®ããå®éçãªå©ç¹ãæã£ãŠããã®ããä»ã®äœããæã£ãŠããã®ãã¯ããããŸããã ç§ã¯äºå®äžã®å€å
žçãªæè²ãåããŠããŸããããããŠãç§ã¯ãã¹ãŠãç§ã®èæ
®ââäºé
ãæµå
¥ãããã³æ
床ã«ãã£ãŠå°ãããŸãã
ãã¶ã€ã»ãã³ã¶ãšãã