åŸæ¥ãããã·ã¥ã¯æååãšããã·ã¥ããŒãã«çšã«æé©åãããŠããããïŒDJB2ã¯æããã®ãã¡ã³ã®ãæ°ã«å ¥ããšããŠæãæµ®ãã³ãŸãïŒãç§ãåžžã«ç解ã§ããªãããšã®1ã€ã¯ãããã·ã¥ããã§ãã¯ãµã ã«ããæ¹æ³ïŒãŸãã¯ãã§ãã¯ãµã ã«ããå¿ èŠããããã©ããïŒã§ãã ãã ããPIC / Arduinoã®çŸ€éã®äžã§ã人ã ã¯äŸç¶ãšããŠå€ãåçŽãª8ããããã§ãã¯ãµã ã16ããããã¬ããã£ãŒãµã ããŸãã¯16ãããCRCã䜿çšããŠããŸãã ããããä»æ¥ã®ããããããé«éãªããã»ããµã§ã¯ãæ°ãããã§ãã¯ãµã ãããè¯ãéžæã§ãããšãã話ã¯ããŸãèŠãããŸããã ããã·ã¥ã§äœ¿çšãããèšç®ã®çš®é¡ãé ãããŸãããïŒ ïŒãœãããŠã§ã¢ã§ã¯CRCãxxHashãããå®éã«é ãã«ãããããã..ïŒãŸãã¯ã8ããããŸãã¯16ãããã«åæžããããšãã«ããã·ã¥é¢æ°ã«æ¬è³ªçã«æªããã®ããããŸããïŒ
xxHashã¯æåã«lz4ã®ãã§ãã¯ãµã ãšããŠèšèšãããŠãããSeaHashãªã©ã®ä»ã®ããã€ãã®ããã·ã¥é¢æ°ã¯ãã¡ã€ã«ã·ã¹ãã ã§ãã§ãã¯ãµã ãšããŠã䜿çšããããã«èšèšãããŠããããšãèªã¿ãŸããã æ¯èŒã®ããã«ãCRC-32ã¯ãäžéšã®å§çž®åœ¢åŒïŒZIP / RARãªã©ïŒã§ãåºã䜿çšãããŠããŸãã ãŸããCRCã«ã¯ãç¹å®ã®å€é åŒãªã©ã®ãšã©ãŒæ€åºã®ããã³ã°è·é¢ã蚌æããç¹å®ã®æ°åŠçç¹æ§ãããããšãèªã¿ãŸãããããããå€ãã®ç¹ã§ãããã·ã¥ã¯ããæ··æ²ãšããç䌌乱æ°ãžã§ãã¬ãŒã¿ã«äŒŒãŠãããå°ãªããšããã®ãããªä¿èšŒã¯ãããŸããããããç§ã«ã©ã®ããã«èŠãããã
ããã«ãããããšãé床ãäœäžãããšããŠããé«éã§ç°¡åã«å®è£ ã§ããããã·ã¥ããããæŽåæ§ã®ç®çã§CRC-32ã䜿çšããæ¹ãããã®ã§ã¯ãªãããšæããŸãã xxHashã«ã¯ãšã©ãŒæ€åºã®ä¿èšŒããããŸããïŒ32ãããããŒãžã§ã³ãæ³å®ããŸãïŒïŒ ããã§ãªãå Žåããã§ãã¯ãµã ãŸãã¯ãšã©ãŒæ€åºã³ãŒããšããŠCRC-32ãšã©ã®ããã«ç«¶åããŸããïŒ ãã¬ãŒããªãã¯äœã§ããïŒ
CRCã¢ã«ãŽãªãºã ã¯éåžžãããã³ã°è·é¢ã®æ¡ä»¶äžã§ã®ãšã©ãŒæ€åºã®ä¿èšŒãåããŠããŸãã ãããããªããã®æ°ãéãããŠããå ŽåãCRCã¯_å¿ ç¶çã«_ç°ãªãçµæãçæããŸãã
ããã¯ããšã©ãŒãæ°ãããããå転ããªããšæšå®ãããç¶æ³ã§äŸ¿å©ã§ãã
ã»ãã®æ°å幎åãããã¯æ¯èŒçäžè¬çã§ãããç¹ã«éä¿¡ã·ããªãªã§ã¯ãåºã«ãªãä¿¡å·ããŸã éåžžã«ãçãã§ãã£ããããç©çå±€ã§ã®æ€åºãããªããããããªãããåé¡ã§ããã
ãã ãããã®ç©ä»¶ã«ã¯æµéè²»ãããããŸãã ãå®å šãªãããã³ã°è·é¢ãè¶ ãããšãè¡çªã®å¯èœæ§ãäœããªããŸãã ããã¯é³©ã®å·£åçã®è«ççåž°çµã§ãã ã©ãã ãæªãã§ããïŒ ãŸããããã¯æ£ç¢ºãªCRCã«äŸåããŸãããç§ã¯è¯ãCRCã3åãã7åæªãç¯å²ã«ãããšäºæ³ããŠããŸãã ããã¯ããªãèããããããããŸããããããã¯2ã3ãããã®åæ£åæžã§ãããããããã»ã©ã²ã©ãããšã§ã¯ãããŸããã ããã§ãã
ãçæ³çãªãåé ããããã£ãç¹åŸŽãšããããã·ã¥ãšã¯å¯Ÿç §çã§ããåäžãããã§ããããšå®å šã«ç°ãªãåºåã§ããããšãå€æŽã¯è¡çªãçæãã確çãæ£ç¢ºã«1/2 ^ nã§ãã ææ¡ããã®ã¯ç°¡åã§ããè¡çªã®ãªã¹ã¯ã¯åžžã«åãã§ãã CRCãšçŽæ¥æ¯èŒãããšãããã³ã°è·é¢ãå°ããå Žåã¯è¡çªçãæªããªããŸããïŒ> 0ã§ããããïŒãããã³ã°è·é¢ã倧ããå Žåã¯è¯å¥œã§ãã
æè¿ã¯æ©éãããç¶æ³ã¯æ ¹æ¬çã«å€ãããŸããã ç©çã¡ãã£ã¢ã®äžã«ããšã©ãŒæ€åºããã³èšæ£ããžãã¯ã®ã¬ã€ã€ãŒããããŸãã ãã©ãã·ã¥ãããã¯ããããããæœåºããããšããBluetoothãã£ãã«ããããããèªã¿åãããšãã§ããŸããã ããæå³ããããŸããã ãããã®ãããã³ã«ã«ã¯ãã¹ããŒããã«ãããã¯ããžãã¯ãçµã¿èŸŒãŸããŠããŸããããã¯ãããè€éã§åŸ©å åããããç©çå±€ã®æ°žç¶çãªãã€ãºãåžžã«è£æ£ããŸãã ãããã倱æããå Žåãããã¯åäžã®ããªãããçæããããšã¯ãããŸãããããããå®å šãªããŒã¿é åãå®å šã«ã·ã£ã³ãã«ããããã¹ãŠãŒãããŸãã¯ã©ã³ãã ãã€ãºã«ãããªããŸãã
ãã®æ°ããç°å¢ã§ã¯ããšã©ãŒãçºçããå Žåããšã©ãŒã¯ããããããªãããã«ããŽãªã«å«ãŸããªããªããŸãã ãã®å ŽåãCRCã®é åžç¹æ§ã責任ã«ãªããŸãã çŽç²ãªããã·ã¥ã¯ãå®éã«ã¯è¡çªãåŒãèµ·ããå¯èœæ§ãäœããªããŸãã
ããã¯ããã§ãã¯ãµã ã®ã¿ãæ€èšããå Žåã§ãã
ãçæ³çãªãããã·ã¥ã®è¿œå ã®ããããã£ã¯ãããã·ã¥ãããããã®ã»ã°ã¡ã³ããæœåºãããšãã«ããã®1 / 2^n
è¡çªç¢ºçãç¹åŸŽãšããããšã§ããããã¯ã次ã®ãããªä»ã®æ§é ã®ãããã®ãœãŒã¹ãšããŠéåžžã«éèŠã§ããããã·ã¥ããŒãã«ãŸãã¯ãã«ãŒã ãã£ã«ã¿ãŒã 察ç
§çã«ãCRCã¯ãã®ãããªä¿èšŒãæäŸããŸããã äžéšã®ãããã¯æçµçã«éåžžã«äºæž¬å¯èœãŸãã¯é«åºŠã«çžé¢ããããã·ã¥ç®çã§ããããæœåºãããšãåæ£ãã¯ããã«æªåããŸãã
ãã§ãã¯ãµã ãšããã·ã¥ã¯åã«2ã€ã®ç°ãªããã¡ã€ã³ã§ãããæ··åããªãã§ãã ããã 確ãã«ãããã¯çè«ã§ãã åé¡ã¯ãããã¯å©äŸ¿æ§ãšçŸå Žã§ã®å®è·µãç¡èŠããŠãããšããããšã§ãã è€æ°ã®ç®çã®ããã«1ã€ã®ããããµãŒããæã€ããšã¯äŸ¿å©ã§ãããããã°ã©ããŒã¯1ã€ã«èœã¡çãããããå¿ããŠããŸããŸãã crc32ããååã«ã©ã³ãã ãã§ãããšæãããšããçç±ã ãã§ãããã·ã¥ã«äœ¿çšãããcrc32ãèŠãåæ°ãæ°ããããšã¯ã§ããŸããã ããã¯èµ·ããã¹ãã§ã¯ãªããšèšãã®ã¯ç°¡åã§ãããåžžã«èµ·ãããŸãã
ãã®ç°å¢ã§ã¯ããŠãŒã¶ãŒã®æåŸ
ã«äžèŽãããããäž¡æ¹ã®ãŠãŒã¹ã±ãŒã¹ã§é©åã«æ©èœããããã«èšèšããããœãªã¥ãŒã·ã§ã³ãææ¡ããããšã¯çã«ããªã£ãŠããŸãã
PIC / Arduinoã®çŸ€éã®äžã§ã人ã ã¯ä»ã§ãå€ãåçŽãª8ããããã§ãã¯ãµã ã16ããããã¬ããã£ãŒãµã ããŸãã¯16ãããCRCã䜿çšããŠããŸãã
ïŒ...ïŒ
8ããããŸãã¯16ãããã«æžãããšãããã·ã¥é¢æ°ã«æ¬è³ªçã«æªããã®ããããŸããïŒ
åªããããã·ã¥ã®ç¹æ§ã«ãããããã·ã¥ãã8ããããŸãã¯16ããããæœåºããããšã¯ç¢ºãã«å¯èœã§ããã1/256ãŸãã¯1/65535ã®è¡çªç¢ºçãçºçããŸãã ããã«ã€ããŠã¯äœã®æžå¿µããããŸããã
ãã ã_history_ã®ã¬ã€ãã³ã·ãŒãåãå ¥ããå¿ èŠããããŸãã 人ã ã¯ããã§ãã¯ãµã ã«ç¹å®ã®ãã§ãã¯ãµã é¢æ°ã䜿çšãããªã©ãç¹å®ã®æ¹æ³ã«æ £ããŠããŸãã ããæè¿ã®ããããŠæœåšçã«ããè¯ã解決çãããã«ãããšããŠããç¿æ £ã¯éãå€åããŸããã
CRCã¢ã«ãŽãªãºã ã¯éåžžãããã³ã°è·é¢ã®æ¡ä»¶äžã§ã®ãšã©ãŒæ€åºã®ä¿èšŒãåããŠããŸãã ãããããªããã®æ°ãéãããŠããå ŽåãCRCã¯_å¿ ç¶çã«_ç°ãªãçµæãçæããŸãã
ããã¯ããšã©ãŒãæ°ãããããå転ããªããšæšå®ãããç¶æ³ã§äŸ¿å©ã§ãã
ã»ãã®æ°å幎åãããã¯æ¯èŒçäžè¬çã§ãããç¹ã«éä¿¡ã·ããªãªã§ã¯ãåºã«ãªãä¿¡å·ããŸã éåžžã«ãçãã§ãã£ããããç©çå±€ã§ã®æ€åºãããªããããããªãããåé¡ã§ããããã ãããã®ç©ä»¶ã«ã¯æµéè²»ãããããŸãã ãå®å šãªãããã³ã°è·é¢ãè¶ ãããšãè¡çªã®å¯èœæ§ãäœããªããŸãã ããã¯é³©ã®å·£åçã®è«ççåž°çµã§ãã ã©ãã ãæªãã§ããïŒ ãŸããããã¯æ£ç¢ºãªCRCã«äŸåããŸãããç§ã¯è¯ãCRCã3åãã7åæªãç¯å²ã«ãããšäºæ³ããŠããŸãã ããã¯ããªãèããããããããŸããããããã¯2ã3ãããã®åæ£åæžã§ãããããããã»ã©ã²ã©ãããšã§ã¯ãããŸããã ããã§ãã
ãçæ³çãªãåé ããããã£ãç¹åŸŽãšããããã·ã¥ãšã¯å¯Ÿç §çã§ããåäžãããã§ããããšå®å šã«ç°ãªãåºåã§ããããšãå€æŽã¯è¡çªãçæãã確çãæ£ç¢ºã«1/2 ^ nã§ãã ææ¡ããã®ã¯ç°¡åã§ããè¡çªã®ãªã¹ã¯ã¯åžžã«åãã§ãã CRCãšçŽæ¥æ¯èŒãããšãããã³ã°è·é¢ãå°ããå Žåã¯è¡çªçãäœããªããŸããïŒ> 0ã§ããããïŒãããã³ã°è·é¢ã倧ããå Žåã¯è¡çªçãé«ããªããŸãã
æè¿ã¯æ©éãããç¶æ³ã¯æ ¹æ¬çã«å€ãããŸããã ç©çã¡ãã£ã¢ã®äžã«ããšã©ãŒæ€åºããã³èšæ£ããžãã¯ã®ã¬ã€ã€ãŒããããŸãã ãã©ãã·ã¥ãããã¯ããããããæœåºããããšããBluetoothãã£ãã«ããããããèªã¿åãããšãã§ããŸããã ããæå³ããããŸããã ãããã®ãããã³ã«ã«ã¯ãã¹ããŒããã«ãããã¯ããžãã¯ãçµã¿èŸŒãŸããŠããŸããããã¯ãããè€éã§åŸ©å åããããç©çå±€ã®æ°žç¶çãªãã€ãºãåžžã«è£æ£ããŸãã ãããã倱æããå Žåãããã¯åäžã®ããªãããçæããããšã¯ãããŸãããããããå®å šãªããŒã¿é åãå®å šã«ã·ã£ã³ãã«ããããã¹ãŠãŒãããŸãã¯ã©ã³ãã ãã€ãºã«ãããªããŸãã
ãã®æ°ããç°å¢ã§ã¯ããšã©ãŒãçºçããå Žåããšã©ãŒã¯ããããããªãããã«ããŽãªã«å«ãŸããªããªããŸãã ãã®å ŽåãCRCã®é åžç¹æ§ã責任ã«ãªããŸãã çŽç²ãªããã·ã¥ã¯ãå®éã«ã¯è¡çªãåŒãèµ·ããå¯èœæ§ãäœããªããŸãã
ããã¯ããã§ãã¯ãµã ã®ã¿ãæ€èšããå Žåã§ãã
ãçæ³çãªãããã·ã¥ã®è¿œå ã®ããããã£ã¯ãããã·ã¥ãããããã®ã»ã°ã¡ã³ããæœåºãããšãã«ããã®1 / 2^n
è¡çªç¢ºçãç¹åŸŽãšããããšã§ããããã¯ã次ã®ãããªä»ã®æ§é ã®ãããã®ãœãŒã¹ãšããŠéåžžã«éèŠã§ããããã·ã¥ããŒãã«ãŸãã¯ãã«ãŒã ãã£ã«ã¿ãŒã å¯Ÿç §çã«ãCRCã¯ãã®ãããªä¿èšŒãæäŸããŸããã äžéšã®ãããã¯æçµçã«éåžžã«äºæž¬å¯èœãŸãã¯é«åºŠã«çžé¢ããããã·ã¥ç®çã§ããããæœåºãããšãåæ£ãã¯ããã«æªåããŸãããã§ãã¯ãµã ãšããã·ã¥ã¯åã«2ã€ã®ç°ãªããã¡ã€ã³ã§ãããæ··åããªãã§ãã ããã 確ãã«ãããã¯çè«ã§ãã åé¡ã¯ãããã¯å©äŸ¿æ§ãšçŸå Žã§ã®å®è·µãç¡èŠããŠãããšããããšã§ãã è€æ°ã®ç®çã®ããã«1ã€ã®ããããµãŒããæã€ããšã¯äŸ¿å©ã§ãããããã°ã©ããŒã¯1ã€ã«èœã¡çãããããå¿ããŠããŸããŸãã crc32ããååã«ã©ã³ãã ãã§ãããšæãããšããçç±ã ãã§ãããã·ã¥ã«äœ¿çšãããcrc32ãèŠãåæ°ãæ°ããããšã¯ã§ããŸããã ããã¯èµ·ããã¹ãã§ã¯ãªããšèšãã®ã¯ç°¡åã§ãããåžžã«èµ·ãããŸãã
ãã®ç°å¢ã§ã¯ããŠãŒã¶ãŒã®æåŸ ã«äžèŽãããããäž¡æ¹ã®ãŠãŒã¹ã±ãŒã¹ã§é©åã«æ©èœããããã«èšèšããããœãªã¥ãŒã·ã§ã³ãææ¡ããããšã¯çã«ããªã£ãŠããŸããPIC / Arduinoã®çŸ€éã®äžã§ã人ã ã¯ä»ã§ãå€ãåçŽãª8ããããã§ãã¯ãµã ã16ããããã¬ããã£ãŒãµã ããŸãã¯16ãããCRCã䜿çšããŠããŸãã
ïŒ...ïŒ
8ããããŸãã¯16ãããã«æžãããšãããã·ã¥é¢æ°ã«æ¬è³ªçã«æªããã®ããããŸããïŒåªããããã·ã¥ã®ç¹æ§ã«ãããããã·ã¥ãã8ããããŸãã¯16ããããæœåºããããšã¯ç¢ºãã«å¯èœã§ããã1/256ãŸãã¯1/65535ã®è¡çªç¢ºçãçºçããŸãã ããã«ã€ããŠã¯äœã®æžå¿µããããŸããã
ãã ã_history_ã®ã¬ã€ãã³ã·ãŒãåãå ¥ããå¿ èŠããããŸãã 人ã ã¯ããã§ãã¯ãµã ã«ç¹å®ã®ãã§ãã¯ãµã é¢æ°ã䜿çšãããªã©ãç¹å®ã®æ¹æ³ã«æ £ããŠããŸãã ããæè¿ã®ããããŠæœåšçã«ããè¯ã解決çãããã«ãããšããŠããç¿æ £ã¯éãå€åããŸããã
CRC32ãšHD = 6ã䜿çšãããšã5ããããšã©ãŒãæ€åºã§ããæ倧2 ^ 31 =çŽ204MBã®ããŒã¹ããæ€åºã§ããããšãããã£ãŠããŸãã
ãã¹ãŠã®ã·ã³ã°ã«ããããšã©ãŒãæ€åºããŸã
xxHashã§ã¯ããšã©ãŒãæ€åºã§ããªãããã«ãäœããããå€æŽããå¿
èŠããããŸããïŒ
ããã·ã¥ã§ã¯ã1ãããã®å€æŽã§ããŸã£ããç°ãªããã€ãžã§ã¹ããäœæãããããšã¯ç¥ã£ãŠããŸãããè¡çªãäœæããããã«å¿
èŠãªãããæ°ãã©ã®ããã«èšç®ã§ããŸããïŒ
å¥ã®è³ªåã¯ããªããèšã£ãããã«ã§ãïŒ
å¯Ÿç §çã«ãCRCã¯ãã®ãããªä¿èšŒãæäŸããŸããã äžéšã®ãããã¯æçµçã«éåžžã«äºæž¬å¯èœãŸãã¯é«åºŠã«çžé¢ããããã·ã¥ç®çã§ããããæœåºãããšãåæ£ãã¯ããã«æªåããŸãã
ãªããããæªãã®ã§ããïŒ ããããäœããã®åœ¢ã§çžé¢ããŠããå Žåããã®çžé¢é¢ä¿ã䜿çšããŠç Žæãããã¡ã€ã«ã修埩ã§ããŸããïŒ
xxHashã§ã¯ããšã©ãŒïŒãŸãã¯è¡çªïŒãæ€åºã§ããªãããã«å€æŽããå¿ èŠã®ãããããæ°
1ãããã
xxHashã¯éæå·åããã·ã¥é¢æ°ã§ããããã§ãã¯ãµã ã§ã¯ãããŸããã ããã³ã°è·é¢ãè¡çªèæ§ã®ä¿èšŒã¯ãããŸããã
ããã¯ããã§ãŸãšããªä»äºãããããšãã§ããŸãããããã¯æè¯ã®éžæã§ã¯ãããŸããã ãã³ããã¬ã³ããšããŠäœ¿ããããªãã®ã§ãã 確ãã«ãããã¯ä»äºãæãéããŸãããããã¯å®éã®ã¬ã³ããããå¹æãäœããæå·ãåŒãèµ·ããå¯èœæ§ããããŸãã
xxHashã§ã¯ããšã©ãŒïŒãŸãã¯è¡çªïŒãæ€åºã§ããªãããã«å€æŽããå¿ èŠã®ãããããæ°
1ãããã
xxHashã¯éæå·åããã·ã¥é¢æ°ã§ããããã§ãã¯ãµã ã§ã¯ãããŸããã ããã³ã°è·é¢ãè¡çªèæ§ã®ä¿èšŒã¯ãããŸããã
ããã¯ããã§ãŸãšããªä»äºãããããšãã§ããŸãããããã¯æè¯ã®éžæã§ã¯ãããŸããã ãã³ããã¬ã³ããšããŠäœ¿ããããªãã®ã§ãã 確ãã«ãããã¯ä»äºãæãéããŸãããããã¯å®éã®ã¬ã³ããããå¹æãäœããæå·ãåŒãèµ·ããå¯èœæ§ããããŸãã
1ãããã®ããŒã¿ãå€æŽããã ãã§ãã³ãŒããŒãã ãŸãããšãã§ãããšããããšã§ããïŒ
è¡çªãåŒãèµ·ããå¯èœæ§ããããŸããïŒ ïŒããã¯æãã§ãïŒãããŠãã®ãããªè¡çªã®ç¢ºçã¯ãã€ãžã§ã¹ããµã€ãºã«äŸåããŸã
1ãããã®ããŒã¿ãå€æŽããã ãã§ãã³ãŒããŒãã ãŸãããšãã§ãããšããããšã§ããïŒ
2ã€ã®ç°ãªãã³ã³ãã³ãããçæãããããã·ã¥å€ãèæ
®ãããšãè¡çªã®ç¢ºçã¯åžžã«1 / 2^64
ïŒ xxh64
ãxxh3
ãªã©ã®é«å質ã®64ãããããã·ã¥ã¢ã«ãŽãªãºã ã®å ŽåïŒãããã2ã€ã®ã³ã³ãã³ãéã®å€æŽã®éã
å®éãå°ãªããšãçè«çã«ã¯ã1ãããã®å€æŽã§è¡çªãçºçããå¯èœæ§ãããããšãæå³ããŸãã
ããã§ããã®ç¢ºçã¯1 / 2^64
ã§ããããšã«æ³šæããŠãã ãããããã¯ãã»ãšãã©åŸ®å°ã§ãã
人ã
ã¯ãã®ãããã¯ãç解ããã®ãæ¯èŒçèŠæã§ãã 圌ãã¯æã
ããããå°ããããšæ··åããŸããããã¯ã»ãšãã©ã®äººã®å¿ã®äžã§ã10ïŒ
ã®ãããªå
·äœçãªéãšããŠèªèãããåŸåããããŸãã
ããæ£ç¢ºãªã¢ã€ãã¢ãåŸãããã«ãç§ã¯ãã®è¡šãåç
§ããã®ã奜ãã§ãïŒ
ã€ãŸãã 1 / 2 ^ 64
ã¯ãåœæãçŽæ¥é ã«ä¹ããå¯èœæ§ãããã¯ããã«äœããåœå¶å®ããã«_3åé£ç¶ã§åœéžãããããäœããªããŸã_ïŒããªãçãããã§ãïŒã ããã¯å®éã«ã¯ãnullãã«ã¯ããã«è¿ãã§ãã ã©ã®ã·ã¹ãã ã®ã»ãšãã©ã®ã³ã³ããŒãã³ãããä»ã®ãœãããŠã§ã¢ãã°ã®åå ããå§ããŠããããããã¯ããã«é«ã確çã§ç Žæããå¯èœæ§ããããŸãã
ãã®ãããªçè«çãª1ãããã®è¡çªãèŠã€ãããå Žåã¯ããã®åé¡ã®è§£æ±ºçãç·åœããæ»æããããã«ãããªã巚倧ãªå ¥åãšããªãä¿¡ããããªãã»ã©ã®éã®é»åãå¿ èŠã«ãªããŸãã ããã§ãã解決çã¯ååšããªãå¯èœæ§ããããŸããæ¡çšãããŠããç®è¡æŒç®ã®æ§è³ªãèæ ®ãããšã1ãããã®å€æŽã§è¡çªãçæããããšãäžå¯èœã§ãã£ãŠãé©ããªãã§ãããã ç§èªèº«ã®è³ãã¯ãå°ãªããšã2ããããå¿ èŠã§ãããããã§ããç®çãéæããæ©äŒãåŸãã«ã¯ãç¹å®ã®å ¥åã®äœçœ®ã«ããããé 眮ããå¿ èŠãããããã®ãããªå€æŽã¯ãã¯ããã©ã³ãã ãã§ã¯ãªããããéæå·åããã·ã¥ã
ããããåŒçšãããããã¹ãã¯ãã§ã«ããããã¹ãŠèª¬æããŠãããšæããŸãïŒå®éã®crc
ã¯ããã³ã°è·é¢ãä¿èšŒããŠããŸãã ããã¯äŸ¿å©ãªå Žåããããä¿¡å·ããããã¬ãã«ã§å€æŽãããããå Žåãããã§ãã¯ãµã èªäœãããªãå°ããå ŽåïŒ16ããããŸãã¯32ãããïŒã以åã¯ã¯ããã«çã«ããªã£ãŠããŸãã 16ãããããã·ã¥ã¢ã«ãŽãªãºã ã§ã¯ããããããªãããéåžžã«å°ãªãè¡çªãèŠéãå¯èœæ§ãç¡èŠã§ããªããããã¿ã¹ã¯ãžã®é©åæ§ãäœããªããŸãã ãããã64ããããŸãã¯128ãããã®ããã·ã¥ãããŒãã«ã«ããã®ã§ãè¡çªã®å¯èœæ§ãã€ãŸãæ€åºãããªãç Žæã®å¯èœæ§ãèšãç¥ããªãã»ã©å°ãããšããçç±ã ãã§ãããã¯ãã¯ãå±éºãªãªãã·ã§ã³ã§ã¯ãªããšæããŸãã
äžéšã®ãããã¯æçµçã«éåžžã«äºæž¬å¯èœãŸãã¯é«åºŠã«çžé¢ããããã·ã¥ç®çã§ããããæœåºãããšãåæ£ãã¯ããã«æªåããŸãã
ãªããããæªãã®ã§ããïŒ
ããã·ã¥ã¯äžè¬ã«ããã§ãã¯ãµã ã®çœ®ãæããããå€ãã®çšéããããŸãã
å®éãã»ãšãã©ã®å Žåãããã·ã¥ã¢ã«ãŽãªãºã ã®ç®çã¯ãããã·ã¥ããŒãã«å
ã®äœçœ®ãæå®ããããã«ããã€ãã®ã©ã³ãã ããããæäŸããããšã§ãã ãããã®ãããã®äžéšãã³ã³ãã³ãã«å¿ããŠäºæž¬å¯èœã«ãªããšãããã·ã¥ããŒãã«å
ã®äœçœ®ã®ååžããã©ã³ãã ãã§ãªããªãããã®çµæãäžéšã®ã»ã«ãä»ã®ã»ã«ãããéããªãŒããŒãããŒããããã·ã¥ããŒãã«ã®ããã©ãŒãã³ã¹ã«æªåœ±é¿ãåãŒããŸãã ã
ããããäœããã®åœ¢ã§çžé¢ããŠããå Žåããã®çžé¢é¢ä¿ã䜿çšããŠç Žæãããã¡ã€ã«ã修埩ã§ããŸããïŒ
ããã¯ãŸã£ããå¥ã®ãããã¯ã§ãã
æå·ããå
¥åãCRCã§ä¿®åŸ©ããããšã¯ãããŸããã CRCã¯ãšã©ãŒãæ€åºããããšããã§ããã修埩ããããšã¯ã§ããŸããã
èªå·±ä¿®åŸ©ããŒã¿ã¯ãããã¯ã§ãããç³ã¿èŸŒã¿ç¬Šå·ãªã©ã®ããŸããŸãªïŒãããŠã¯ããã«èšç®ã«é¢ä¿ããïŒææ³ã䜿çšããŸãã ããã¯ã¯ããã«è€éã§ãã
ãã®ãããªçè«çãª1ãããã®è¡çªãèŠã€ãããå Žåã¯ããã®åé¡ã®è§£æ±ºçãç·åœããæ»æããããã«ãããªã巚倧ãªå ¥åãšããªãä¿¡ããããªãã»ã©ã®éã®é»åãå¿ èŠã«ãªããŸãã ããã§ãã解決çã¯ååšããªãå¯èœæ§ããããŸããæ¡çšãããŠããç®è¡æŒç®ã®æ§è³ªãèæ ®ãããšã1ãããã®å€æŽã§è¡çªãçæããããšãäžå¯èœã§ãã£ãŠãé©ããªãã§ãããã ç§èªèº«ã®è³ãã¯ãå°ãªããšã2ããããå¿ èŠã§ãããããã§ããç®çãéæããæ©äŒãåŸãã«ã¯ãç¹å®ã®å ¥åã®äœçœ®ã«ããããé 眮ããå¿ èŠãããããã®ãããªå€æŽã¯ãã¯ããã©ã³ãã ãã§ã¯ãªããããéæå·åããã·ã¥ã
確ãã«; ããå®å šã«ããããã«ãç§ã®åã®ã¹ããŒãã¡ã³ãã¯ã240ãã€ããè¶ ããå ¥åã®å€§ããªãµã€ãºã®ã»ã¯ã·ã§ã³ã«åããããŠããŸããã
ãã ããå
¥åã64ãããã®secret
ãããããšæ£ç¢ºã«äžèŽããå¿
èŠãããéããããµã€ãºã®ç¯å²ã§ã¯ãã·ã³ã°ã«ãããã®è¡çªãçºçããå¯èœæ§ããããŸãã å
¥åãã©ã³ãã ã§ããïŒã€ãŸããè¡çªãçæããããã«èšèšãããŠããªãïŒãšä»®å®ãããšãæ£ç¢ºãªå Žæã§ã®æ£ç¢ºãª64ãããå
¥åã«åºã¥ãè¡çªã¯ãŸã ãã®1 / 2^64
é åå
ã«ããããã蚱容ã§ãããšæããŸããã ããã«ãäžèŽããsecret
ãå¹æçã«_ç§å¯_ã«ããããšãã§ãããããå€éšã®æ»æè
ã¯ãããèŠã€ããããã«ãã«ãŒããã©ãŒã¹æ»æãè¡ãå¿
èŠããããŸãã
1ãããã®ããŒã¿ãå€æŽããã ãã§ãã³ãŒããŒãã ãŸãããšãã§ãããšããããšã§ããïŒ
2ã€ã®ç°ãªãã³ã³ãã³ãããçæãããããã·ã¥å€ãèæ ®ãããšãè¡çªã®ç¢ºçã¯åžžã«
1 / 2^64
ïŒxxh64
ãxxh3
ãªã©ã®é«å質ã®64ãããããã·ã¥ã¢ã«ãŽãªãºã ã®å ŽåïŒãããã2ã€ã®ã³ã³ãã³ãéã®å€æŽã®éãå®éãå°ãªããšãçè«çã«ã¯ã1ãããã®å€æŽã§è¡çªãçºçããå¯èœæ§ãããããšãæå³ããŸãã
ããã§ããã®ç¢ºçã¯
1 / 2^64
ã§ããããšã«æ³šæããŠãã ãããããã¯ãã»ãšãã©åŸ®å°ã§ãã
人ã ã¯ãã®ãããã¯ãç解ããã®ãæ¯èŒçèŠæã§ãã 圌ãã¯æã ããããå°ããããšæ··åããŸããããã¯ã»ãšãã©ã®äººã®å¿ã®äžã§ã10ïŒ ã®ãããªå ·äœçãªéãšããŠèªèãããåŸåããããŸããããæ£ç¢ºãªã¢ã€ãã¢ãåŸãããã«ãç§ã¯ãã®è¡šãåç §ããã®ã奜ãã§ãïŒ
ã€ãŸãã
1 / 2 ^ 64
ã¯ãåœæãçŽæ¥é ã«ä¹ããå¯èœæ§ãããã¯ããã«äœããåœå¶å®ããã«_3åé£ç¶ã§åœéžãããããäœããªããŸã_ïŒããªãçãããã§ãïŒã ããã¯å®éã«ã¯ãnullãã«ã¯ããã«è¿ãã§ãã ã©ã®ã·ã¹ãã ã®ã»ãšãã©ã®ã³ã³ããŒãã³ãããä»ã®ãœãããŠã§ã¢ãã°ã®åå ããå§ããŠããããããã¯ããã«é«ã確çã§ç Žæããå¯èœæ§ããããŸãããã®ãããªçè«çãª1ãããã®è¡çªãèŠã€ãããå Žåã¯ããã®åé¡ã®è§£æ±ºçãç·åœããæ»æããããã«ãããªã巚倧ãªå ¥åãšããªãä¿¡ããããªãã»ã©ã®éã®é»åãå¿ èŠã«ãªããŸãã ããã§ãã解決çã¯ååšããªãå¯èœæ§ããããŸããæ¡çšãããŠããç®è¡æŒç®ã®æ§è³ªãèæ ®ãããšã1ãããã®å€æŽã§è¡çªãçæããããšãäžå¯èœã§ãã£ãŠãé©ããªãã§ãããã ç§èªèº«ã®è³ãã¯ãå°ãªããšã2ããããå¿ èŠã§ãããããã§ããç®çãéæããæ©äŒãåŸãã«ã¯ãç¹å®ã®å ¥åã®äœçœ®ã«ããããé 眮ããå¿ èŠãããããã®ãããªå€æŽã¯ãã¯ããã©ã³ãã ãã§ã¯ãªããããéæå·åããã·ã¥ã
ããããåŒçšãããããã¹ãã¯ãã§ã«ããããã¹ãŠèª¬æããŠãããšæããŸãïŒå®éã®
crc
ã¯ããã³ã°è·é¢ãä¿èšŒããŠããŸãã ããã¯äŸ¿å©ãªå Žåããããä¿¡å·ããããã¬ãã«ã§å€æŽãããããå Žåãããã§ãã¯ãµã èªäœãããªãå°ããå ŽåïŒ16ããããŸãã¯32ãããïŒã以åã¯ã¯ããã«çã«ããªã£ãŠããŸãã 16ãããããã·ã¥ã¢ã«ãŽãªãºã ã§ã¯ããããããªãããéåžžã«å°ãªãè¡çªãèŠéãå¯èœæ§ãç¡èŠã§ããªããããã¿ã¹ã¯ãžã®é©åæ§ãäœããªããŸãã ãããã64ããããŸãã¯128ãããã®ããã·ã¥ãããŒãã«ã«ããã®ã§ãè¡çªã®å¯èœæ§ãã€ãŸãæ€åºãããªãç Žæã®å¯èœæ§ãèšãç¥ããªãã»ã©å°ãããšããçç±ã ãã§ãããã¯ãã¯ãå±éºãªãªãã·ã§ã³ã§ã¯ãªããšæããŸããäžéšã®ãããã¯æçµçã«éåžžã«äºæž¬å¯èœãŸãã¯é«åºŠã«çžé¢ããããã·ã¥ç®çã§ããããæœåºãããšãåæ£ãã¯ããã«æªåããŸãã
ãªããããæªãã®ã§ããïŒ
ããã·ã¥ã¯äžè¬ã«ããã§ãã¯ãµã ã®çœ®ãæããããå€ãã®çšéããããŸãã
å®éãã»ãšãã©ã®å Žåãããã·ã¥ã¢ã«ãŽãªãºã ã®ç®çã¯ãããã·ã¥ããŒãã«å ã®äœçœ®ãæå®ããããã«ããã€ãã®ã©ã³ãã ããããæäŸããããšã§ãã ãããã®ãããã®äžéšãã³ã³ãã³ãã«å¿ããŠäºæž¬å¯èœã«ãªããšãããã·ã¥ããŒãã«å ã®äœçœ®ã®ååžããã©ã³ãã ãã§ãªããªãããã®çµæãäžéšã®ã»ã«ãä»ã®ã»ã«ãããéããªãŒããŒãããŒããããã·ã¥ããŒãã«ã®ããã©ãŒãã³ã¹ã«æªåœ±é¿ãåãŒããŸãã ãããããäœããã®åœ¢ã§çžé¢ããŠããå Žåããã®çžé¢é¢ä¿ã䜿çšããŠç Žæãããã¡ã€ã«ã修埩ã§ããŸããïŒ
ããã¯ãŸã£ããå¥ã®ãããã¯ã§ãã
æå·ããå ¥åãCRCã§ä¿®åŸ©ããããšã¯ãããŸããã CRCã¯ãšã©ãŒãæ€åºããããšããã§ããã修埩ããããšã¯ã§ããŸãããèªå·±ä¿®åŸ©ããŒã¿ã¯ãããã¯ã§ãããç³ã¿èŸŒã¿ç¬Šå·ãªã©ã®ããŸããŸãªïŒãããŠã¯ããã«èšç®ã«é¢ä¿ããïŒææ³ã䜿çšããŸãã ããã¯ã¯ããã«è€éã§ãã
ãããã®ã·ããªãªã確èªã§ããŸããïŒ
説æãããŠããã·ããªãªã¯æ¬¡ã®ãšããã§ãã
LZ4ãã¬ãŒã 圢åŒã¯ãã³ã³ãããªã³ãã§ãã¯ãµã ãšããŠ32ãããããã·ã¥ã§ããXXH32
䜿çšããŸãã
ããã©ã«ãã§ã¯ããã¬ãŒã å
šäœã®ã³ã³ãã³ããããæ£ç¢ºã«ã¯ãã¬ãŒã ã®_uncompressed_ã³ã³ãã³ãïŒè§£ååŸïŒã«é©çšããããããéä¿¡ããã»ã¹ãšãã³ãŒãããã»ã¹ã®äž¡æ¹ãæ€èšŒãããŸãã
ãªãã·ã§ã³ã§åãããã¯ã«é©çšããããšãã§ããŸãããã®å Žåãåãããã¯ã®_compressed_ã³ã³ãã³ãããã§ãã¯ãµã ããŸãã
äž¡æ¹ãšã环ç©ã§ããŸãã
æ€åºãããªããŸãŸã«ããã«ã¯ãç Žæã___all___ã®è©²åœãããã§ãã¯ãµã ã«æ£åžžã«åæ Œããå¿
èŠããããŸãã
ãããã¯ãã§ãã¯ãµã ãæå¹ã«ãªã£ãŠãããšä»®å®ããç Žæãå®å
šã«1ã€ã®ãããã¯å
ã«ãããšä»®å®ãããšããããã¯ãšãã¬ãŒã ãã§ãã¯ãµã ã®äž¡æ¹ãééããå¯èœæ§ã¯ç¢ºãã«1 / 2^32 x 1 / 2^32 = 1 / 2^64
ã§ãã
çŸåšãè€æ°ã®ç Žæã€ãã³ããããããããŸãã¯åäžã®å€§ããªç Žæã»ã¯ã·ã§ã³ãé£ç¶ãããããã¯ãã«ããŒããŠããããã«ãç ŽæããããŒã¿ãè€æ°ã®ãããã¯ã«ååšããå Žåãç Žæãæ€åºãããªããŸãŸã«ãªãã®ã¯ããã«å°é£ã§ãã é¢é£ãããããã¯ãã§ãã¯ãµã ã®ãããããšã®è¡çªãçæããå¿
èŠããããŸãã
ããšãã°ãç Žæã2ã€ã®ãããã¯ã«åºãã£ãŠãããšä»®å®ãããšããã®ç Žæãæ€åºãããªããŸãŸã«ãªãå¯èœæ§ã¯1 / 2^32 x 1 / 2^32 x 1 / 2^32 = 1 / 2^96
ã§ãã 倩æåŠçã«å°ããã
ç Žæããåãããã¯ãããã®äžã«ãã解åããã»ã¹ã«ãã£ãŠãã³ãŒãäžèœãšããŠæ€åºãããå¯èœæ§ããããšããäºå®ãã«ãŠã³ãããŠããŸããã
ããã§ãããããã¯ãã§ãã¯ãµã ãšãã¬ãŒã ãã§ãã¯ãµã ãçµã¿åããããšãç Žæã€ãã³ããæ€åºããå¯èœæ§ãåçã«é«ãŸããŸãã
説æãããŠããã·ããªãªã¯æ¬¡ã®ãšããã§ãã
* LZ4-compressed data being corrupted (which is already a pretty rare event by itself) * Corruption remaining undetected due to hash collision.
LZ4ãã¬ãŒã 圢åŒã¯ãã³ã³ãããªã³ãã§ãã¯ãµã ãšããŠ32ãããããã·ã¥ã§ãã
XXH32
䜿çšããŸãã
ããã©ã«ãã§ã¯ããã¬ãŒã å šäœã®ã³ã³ãã³ããããæ£ç¢ºã«ã¯ãã¬ãŒã ã®_uncompressed_ã³ã³ãã³ãïŒè§£ååŸïŒã«é©çšããããããéä¿¡ããã»ã¹ãšãã³ãŒãããã»ã¹ã®äž¡æ¹ãæ€èšŒãããŸãã
ãªãã·ã§ã³ã§åãããã¯ã«é©çšããããšãã§ããŸãããã®å Žåãåãããã¯ã®_compressed_ã³ã³ãã³ãããã§ãã¯ãµã ããŸãã
äž¡æ¹ãšã环ç©ã§ããŸããæ€åºãããªããŸãŸã«ããã«ã¯ãç Žæã_ãã¹ãŠã®_該åœãããã§ãã¯ãµã ã«æ£åžžã«åæ Œããå¿ èŠããããŸãã
ãããã¯ãã§ãã¯ãµã ãæå¹ã«ãªã£ãŠãããšä»®å®ããç Žæãå®å šã«1ã€ã®ãããã¯å ã«ãããšä»®å®ãããšããããã¯ãšãã¬ãŒã ãã§ãã¯ãµã ã®äž¡æ¹ãééããå¯èœæ§ã¯ç¢ºãã«1 / 2^32 x 1 / 2^32 = 1 / 2^64
ã§ããçŸåšãè€æ°ã®ç Žæã€ãã³ããããããããŸãã¯åäžã®å€§ããªç Žæã»ã¯ã·ã§ã³ãé£ç¶ãããããã¯ãã«ããŒããŠããããã«ãç ŽæããããŒã¿ãè€æ°ã®ãããã¯ã«ååšããå Žåãç Žæãæ€åºãããªããŸãŸã«ãªãã®ã¯ããã«å°é£ã§ãã é¢é£ãããããã¯ãã§ãã¯ãµã ã®ãããããšã®è¡çªãçæããå¿ èŠããããŸãã
ããšãã°ãç Žæã2ã€ã®ãããã¯ã«åºãã£ãŠãããšä»®å®ãããšããã®ç Žæãæ€åºãããªããŸãŸã«ãªãå¯èœæ§ã¯1 / 2^32 x 1 / 2^32 x 1 / 2^32 = 1 / 2^96
ã§ãã 倩æåŠçã«å°ãããç Žæããåãããã¯ãããã®äžã«ãã解åããã»ã¹ã«ãã£ãŠãã³ãŒãäžèœãšããŠæ€åºãããå¯èœæ§ããããšããäºå®ãã«ãŠã³ãããŠããŸããã
ããã§ãããããã¯ãã§ãã¯ãµã ãšãã¬ãŒã ãã§ãã¯ãµã ãçµã¿åããããšãç Žæã€ãã³ããæ€åºããå¯èœæ§ãåçã«é«ãŸããŸãã
LZ4ããã®å Žã§äœ¿çšããããšã¯å¯èœã§ããïŒ ã€ãŸããããŒã¿ãååŸãããããã«ããŒã¿ãå§çž®/解åããŸãã ã©ãããããããã€ãã©ã€ã³ã§ãã
xxHashã¯ã©ãã§ããïŒ
LZ4ããã®å Žã§äœ¿çšããããšã¯å¯èœã§ããïŒ ã€ãŸããããŒã¿ãååŸãããããã«ããŒã¿ãå§çž®/解åããŸãã
ãããã¹ããªãŒãã³ã°ã¢ãŒãã§ãã ã¯ããå¯èœã§ãã
xxHashã¯ã©ãã§ããïŒ
ãã¬ãŒã ãã§ãã¯ãµã ã¯ç¶ç¶çã«æŽæ°ãããŸãããçµæã¯ãã¬ãŒã ã®æåŸã§ã®ã¿çæãããŸãã ãããã£ãŠããã¬ãŒã çµäºã€ãã³ããŸã§æ¯èŒãããã§ãã¯ãµã çµæã¯ãããŸããïŒã¹ããªãŒã ã¯è€æ°ã®è¿œå ãã¬ãŒã ã§æ§æãããŠããå ŽåããããŸãããéåžžã¯ããã§ã¯ãããŸããïŒã
å¯Ÿç §çã«ããããã¯ãã§ãã¯ãµã ã¯åãããã¯ã§äœæããããããã¹ããªãŒãã³ã°äžã«å®æçã«äœæããã³ãã§ãã¯ãããŸãã
äž¡æ¹ã®ãã§ãã¯ãµã ã¯XXH32
ãŸãã
æãåèã«ãªãã³ã¡ã³ã
CRCã¢ã«ãŽãªãºã ã¯éåžžãããã³ã°è·é¢ã®æ¡ä»¶äžã§ã®ãšã©ãŒæ€åºã®ä¿èšŒãåããŠããŸãã ãããããªããã®æ°ãéãããŠããå ŽåãCRCã¯_å¿ ç¶çã«_ç°ãªãçµæãçæããŸãã
ããã¯ããšã©ãŒãæ°ãããããå転ããªããšæšå®ãããç¶æ³ã§äŸ¿å©ã§ãã
ã»ãã®æ°å幎åãããã¯æ¯èŒçäžè¬çã§ãããç¹ã«éä¿¡ã·ããªãªã§ã¯ãåºã«ãªãä¿¡å·ããŸã éåžžã«ãçãã§ãã£ããããç©çå±€ã§ã®æ€åºãããªããããããªãããåé¡ã§ããã
ãã ãããã®ç©ä»¶ã«ã¯æµéè²»ãããããŸãã ãå®å šãªãããã³ã°è·é¢ãè¶ ãããšãè¡çªã®å¯èœæ§ãäœããªããŸãã ããã¯é³©ã®å·£åçã®è«ççåž°çµã§ãã ã©ãã ãæªãã§ããïŒ ãŸããããã¯æ£ç¢ºãªCRCã«äŸåããŸãããç§ã¯è¯ãCRCã3åãã7åæªãç¯å²ã«ãããšäºæ³ããŠããŸãã ããã¯ããªãèããããããããŸããããããã¯2ã3ãããã®åæ£åæžã§ãããããããã»ã©ã²ã©ãããšã§ã¯ãããŸããã ããã§ãã
ãçæ³çãªãåé ããããã£ãç¹åŸŽãšããããã·ã¥ãšã¯å¯Ÿç §çã§ããåäžãããã§ããããšå®å šã«ç°ãªãåºåã§ããããšãå€æŽã¯è¡çªãçæãã確çãæ£ç¢ºã«1/2 ^ nã§ãã ææ¡ããã®ã¯ç°¡åã§ããè¡çªã®ãªã¹ã¯ã¯åžžã«åãã§ãã CRCãšçŽæ¥æ¯èŒãããšãããã³ã°è·é¢ãå°ããå Žåã¯è¡çªçãæªããªããŸããïŒ> 0ã§ããããïŒãããã³ã°è·é¢ã倧ããå Žåã¯è¯å¥œã§ãã
æè¿ã¯æ©éãããç¶æ³ã¯æ ¹æ¬çã«å€ãããŸããã ç©çã¡ãã£ã¢ã®äžã«ããšã©ãŒæ€åºããã³èšæ£ããžãã¯ã®ã¬ã€ã€ãŒããããŸãã ãã©ãã·ã¥ãããã¯ããããããæœåºããããšããBluetoothãã£ãã«ããããããèªã¿åãããšãã§ããŸããã ããæå³ããããŸããã ãããã®ãããã³ã«ã«ã¯ãã¹ããŒããã«ãããã¯ããžãã¯ãçµã¿èŸŒãŸããŠããŸããããã¯ãããè€éã§åŸ©å åããããç©çå±€ã®æ°žç¶çãªãã€ãºãåžžã«è£æ£ããŸãã ãããã倱æããå Žåãããã¯åäžã®ããªãããçæããããšã¯ãããŸãããããããå®å šãªããŒã¿é åãå®å šã«ã·ã£ã³ãã«ããããã¹ãŠãŒãããŸãã¯ã©ã³ãã ãã€ãºã«ãããªããŸãã
ãã®æ°ããç°å¢ã§ã¯ããšã©ãŒãçºçããå Žåããšã©ãŒã¯ããããããªãããã«ããŽãªã«å«ãŸããªããªããŸãã ãã®å ŽåãCRCã®é åžç¹æ§ã責任ã«ãªããŸãã çŽç²ãªããã·ã¥ã¯ãå®éã«ã¯è¡çªãåŒãèµ·ããå¯èœæ§ãäœããªããŸãã
ããã¯ããã§ãã¯ãµã ã®ã¿ãæ€èšããå Žåã§ãã
ãçæ³çãªãããã·ã¥ã®è¿œå ã®ããããã£ã¯ãããã·ã¥ãããããã®ã»ã°ã¡ã³ããæœåºãããšãã«ããã®
1 / 2^n
è¡çªç¢ºçãç¹åŸŽãšããããšã§ããããã¯ã次ã®ãããªä»ã®æ§é ã®ãããã®ãœãŒã¹ãšããŠéåžžã«éèŠã§ããããã·ã¥ããŒãã«ãŸãã¯ãã«ãŒã ãã£ã«ã¿ãŒã å¯Ÿç §çã«ãCRCã¯ãã®ãããªä¿èšŒãæäŸããŸããã äžéšã®ãããã¯æçµçã«éåžžã«äºæž¬å¯èœãŸãã¯é«åºŠã«çžé¢ããããã·ã¥ç®çã§ããããæœåºãããšãåæ£ãã¯ããã«æªåããŸãããã§ãã¯ãµã ãšããã·ã¥ã¯åã«2ã€ã®ç°ãªããã¡ã€ã³ã§ãããæ··åããªãã§ãã ããã 確ãã«ãããã¯çè«ã§ãã åé¡ã¯ãããã¯å©äŸ¿æ§ãšçŸå Žã§ã®å®è·µãç¡èŠããŠãããšããããšã§ãã è€æ°ã®ç®çã®ããã«1ã€ã®ããããµãŒããæã€ããšã¯äŸ¿å©ã§ãããããã°ã©ããŒã¯1ã€ã«èœã¡çãããããå¿ããŠããŸããŸãã crc32ããååã«ã©ã³ãã ãã§ãããšæãããšããçç±ã ãã§ãããã·ã¥ã«äœ¿çšãããcrc32ãèŠãåæ°ãæ°ããããšã¯ã§ããŸããã ããã¯èµ·ããã¹ãã§ã¯ãªããšèšãã®ã¯ç°¡åã§ãããåžžã«èµ·ãããŸãã
ãã®ç°å¢ã§ã¯ããŠãŒã¶ãŒã®æåŸ ã«äžèŽãããããäž¡æ¹ã®ãŠãŒã¹ã±ãŒã¹ã§é©åã«æ©èœããããã«èšèšããããœãªã¥ãŒã·ã§ã³ãææ¡ããããšã¯çã«ããªã£ãŠããŸãã
åªããããã·ã¥ã®ç¹æ§ã«ãããããã·ã¥ãã8ããããŸãã¯16ããããæœåºããããšã¯ç¢ºãã«å¯èœã§ããã1/256ãŸãã¯1/65535ã®è¡çªç¢ºçãçºçããŸãã ããã«ã€ããŠã¯äœã®æžå¿µããããŸããã
ãã ã_history_ã®ã¬ã€ãã³ã·ãŒãåãå ¥ããå¿ èŠããããŸãã 人ã ã¯ããã§ãã¯ãµã ã«ç¹å®ã®ãã§ãã¯ãµã é¢æ°ã䜿çšãããªã©ãç¹å®ã®æ¹æ³ã«æ £ããŠããŸãã ããæè¿ã®ããããŠæœåšçã«ããè¯ã解決çãããã«ãããšããŠããç¿æ £ã¯éãå€åããŸããã