ãããã·ã¥å€ã®è¡çªãïŒã³ãªãžã§ã³ïŒããããŒã¿ã®æ¹ããããªã©ã®å¯Ÿçã§ããã¹ããªããã·ã¥ã»ã¢ã«ãŽãªã ã倿ããããã«ãããã·ã¥å€ã®ãé·ããããé床ã®ç®å®ãäžèŠ§ãæ¬²ããã
ã ... ... ããã·ã¥ïŒ
... ã£ãŠããããã·ã¥ã£ãŠããããªã«ããããã®ïŒå§çž®ãããæå·ãšã¡ãããïŒ
TL; DR ïŒä»åç£æ¥ïŒ
-
ãã®èšäºã¯ããã·ã¥é¢æ°ã®åºåçµæãæ¡æ°ããšã«ããŸãšãããã®ã§ãã
- ããã·ã¥é¢æ°ã®åã ã®ãã¢ã«ãŽãªãºã ãæå€§äœæåã® 16 鲿°ã§è¿ããŠããããã®äºå確èªã«å©çšãã ããã
-
ãã¹ã¿ãŒãäžçªåŒ·ãã€ããããã
-
ãã©ã³ã¹åªå
-
ð
sha3-512ïŒ64 Byte, 128æ¡, 2020/12/22 çŸåšïŒ -
OS ãããã°ã©ã èšèªéã®äºææ§ã»åŒ·åºŠã»é床ã®äžçªãã©ã³ã¹ãåããŠããããã·ã¥ã»ã¢ã«ãŽãªãºã ã§ã匷ããã€ãã䜿ãããããªãã
SHA3-256ã -
äºææ§ïŒ
ããã§ããäºææ§ãšã¯ã倧æµã©ã®èšèªã§ãæšæºã§å®è£ ããŠããã¢ã«ãŽãªãºã ãã®ããšã§ããNIST ãå¶å®ããŠãã Secure Hash AlgorithmïŒç¥ã㊠SHAïŒã®ãã¡ãSHA-3 ã·ãªãŒãºã¯ææ°çã®ã¢ã«ãŽãªãºã ã§ãããããæ±çšæ§ããšãŠãé«ãã§ãã
æåŒ·ã¯ SHA3-512 ãªã®ã§ãããçŸå®çã§äœ¿ããããã®ã¯ SHA3-256 ã§ããããã
1 äžä»£åã® SHA-2 ã·ãªãŒãºã§ãã£ãŠããSHA256 ã SHA512 ã§ããã°ç®ãããããŠãå¿ èŠã¯ãããŸãããããããSHA-2 㯠20 幎åã®ã¢ã«ãŽãªãºã ã§ãããã¯ã©ãŠãã®æŒç®åããããã¯ãã§ãŒã³ã®ãã€ãã³ã°ã»ãã¡ãŒã ã®ããã·ã³ã°æŒç®åã 10 å¹Žã§æ¿å¢ããŠããããšã«çæããŸãããšããã®ã 2 äžä»£åã® SHA-1 ã§ãSHA-1 ã®å¹ççãªè¡çªæ¹æ³ã®è«æããçºè¡šãããŠãã Google ããã®ã¯ã©ãŠãæŒç®åã䜿ãå®éã«è¡çªäŸãèŠã€ããããšããããSHA-1 ã¯å»æ¢ãããã ãã§ãªããå系統ã®ã¢ã«ãŽãªãºã ã§ãã SHA-2 ãäž¡æãåºããŠå®å šãšã¯èšããªããªã£ãããã§ãã
ã€ãŸããSHA-3 ã¯ãå°æ¥ SHA256 ã SHA512 ãç Žãããå Žåã«åããŠã®å¥ç³»çµ±ã«ããããã¯ã¢ããã§ããäŸãã°ãNIST ãé·ãã宿œããŠãã "PQC"ïŒPost-Quantum Cryptographyãéåã³ã³ãã¥ãŒã¿ãŒæŒç®ã«ãèæ§ã®ããæå·ã¢ã«ãŽãªãºã åæŠïŒã§ããåè ã¯å éšåŠçã®äžéšã§ããã·ã¥é¢æ°ã« SHA3 ãåããŠããŸãããã®ãããSHA256ïŒSHA2-256ïŒã SHA512ïŒSHA2-512ïŒã ãã§ãªã SHA3-256/SHA3-512 ã«ã察å¿ããŠãããããšããã ãã§ãã -
泚æ: SHA-3 ã®ã©ã€ãã©ãªã«æ¬å®¶ libXKCP ã䜿ã£ãŠããå Žåãè匱æ§ãçºèŠãããŠããã®ã§ãä¿®æ£ãããã®åœãã£ãææ°ã®ãã®ã䜿ã£ãŠãã ãããOpenSSL çãããŒã¹ã«ããã©ã€ãã©ãªãªã倧äžå€«ã§ããããã¯ãææ°çã䜿ãã®ããªã¹ã¹ã¡ããŸãã
-
SHA-3 ã©ã€ãã©ãªã®è匱æ§ã«ã€ããŠ
2022/10/20 ã«ãSHA-3 ã®ãªãªãžãã«ãäœã£ã Keccak ããŒã ãæäŸããŠãã libXKCP ã©ã€ãã©ãªã§ããããã¡ãªãŒããŒãããŒã®è匱æ§ãçºèŠãããŠããŸããïŒCVE-2022-37454ãCWE-680ïŒ
libXKCPã® fdc6fef0 ã®ã³ãããã§ä¿®æ£ããããåœãã£ãŠããã®ã§ãã©ã€ãã©ãªãææ°ã®ãã®ã«ããŠãã ããã- PHP
- 7.4.33 以éã§å¯Ÿå¿
- 8.0.25 以éã§å¯Ÿå¿
- 8.1.12 以éã§å¯Ÿå¿
- Python (cPython)
- 3.11 以éã§å¯Ÿå¿ïŒlibXKCP ã® SHA-3 ãã OpenSSL ã® SHA-3 ã«å€æŽïŒ
- Debian ã®ããã±ãŒãžå¯Ÿå¿ç¶æ³
- CVE-2022-37454 Tracker | Secrurity Tracker @ debian.org
ãªããOpenSSL ãããŒã¹ãšããã©ã€ãã©ãªã«ã¯ä»åã®
CVE-2022-37454ã¯åé¡ãããŸããããOpenSSL ã«ãããŒãžã§ã³ã«ãã£ãŠç°ãªãè匱æ§ããããŸãïŒCVE-2022-3602ãCVE-2022-3786ïŒããŸãããã®è匱æ§ããSHA-3 ã«è匱æ§ããã£ãããšèšèŒããŠããã¯ãªãã¯ãã€ããªèšäºããããŸãããå®è£ æ¹æ³ã«åé¡ããã£ãã ãã§ãSHA-3 ã®ã¢ã«ãŽãªãºã èªäœã«è匱æ§ãèŠã€ãã£ãããã§ã¯ãããŸããããããã®ã©ã€ãã©ãªã䜿ãã«ããŠãææ°ã®ã©ã€ãã©ãªã䜿ãããã«ããŠãã ããã
åèæç®
- SHA-3 Buffer Overflow @ Nicky Mouha
- CVE-2022-37454 @ CVE Report
- Buffer overflow in sponge queue functions | Security Advisories | XKCP @ GitHub
- #105 Incorrect integer comparisons and buffer overflows | Issue | XKCP @ GitHub
- #98517 [CVE-2022-37454] Buffer overflow in the _sha3 module in python versions <= 3.10 | cPython @ GitHub
- ãXKCP SHA-3ãã«èåŒ±æ§ - ãPythonããPHPããªã©ã«ãåœ±é¿ @ Security NEXT
- PHPã«ã¢ããããŒããè€æ°è匱æ§ãä¿®æ£ @ Secrurity NEXT
- PHP
-
-
-
é床åªå
- ð
BLAKE3ïŒ64 Byte, 128æ¡, 2021/09/02 çŸåšïŒ - OS ãããã°ã©ã èšèªéã®äºææ§ãããé床åªå ãã®æ°åããã·ã¥ã»ã¢ã«ãŽãªãºã ã
-
é床åªå ïŒ
é床ã ããæ±ãããšä»ã«ãããã®ã§ãããæ¬åœã«é床ã ããæ±ãããšæ²Œã«ãããã®ã§æ³šæããŸãããã
ãšèšãã®ãããããã·ã¥åããŠããŸãããçéã§ãããšèšã£ãé端ãã»ãã¥ãªãã£ã ãã§ãªãä»ã® OSã»ã¢ããªã»ããã°ã©ã èšèªãšã®äºææ§ãšãã£ãéšåã§ãæ¯èŒããããããéžæã®ãã©ã³ã¹ãé£ããããã§ãã
äŸãã°ãçéã ãã©ããããªã¢ã«ãŽãªãºã ã䜿ããšãä»ã®ããã°ã©ã èšèªã§ã¯å®è£ ãããŠããªãã£ããæ€èšŒããããã£ãããããšãæ²ããããªãäžæãããšãçéã ãã©ä¿¡çšã§ããªãããšãã£ãã¬ããã«ã貌ããããããŸãã
æå¿ã«ããé床ãåŒ·åºŠã®æž¬å®ã« SMhasher ãªã©ããããè«æãå€èšèªã§ã®å®è£ ãªã©ãèæ ®ããªãããèªåã®ç°å¢ã§ã®å®æž¬å€ãããŒã¹ã«ç·åçã«å€æããå¿ èŠããããŸãã
ããŠãBLAKE3 ã¯ãäžèš SHA-3 ã«ãªãæãã BLAKE2 ã®åŸç¶ã§ãã2021/07/25 ã« v1.0 ããªãªãŒã¹ããã°ããã®æ°åã§ããããã倧åã® OS ãã©ã€ãã©ãªã§æ»èªäžãªã©ã«ããæšæºã§å®è£ ãããŠããªããã®ãå€ããããŸãããã®ãããæ¬èšäºã®äžèЧã«å«ããŠããŸããããšã¯èšããBLAKE2 ã®ç¥å床ã»èªç¥åºŠããèšã£ãŠã BLAKE3 ã¯ã¡ãžã£ãŒãªïŒå ¬çæ©é¢ã«ãæ¡çšããããïŒã¢ã«ãŽãªãºã ã® 1 ã€ãšèšã£ãŠããã§ãããã
匷床㯠SHA3-256ïŒå¯å€é·åºåã«ãããŠã¯ãSHAKE128ãïŒãšåçšåºŠãšäž»åŒµïŒã¢ããŠã³ã¹ïŒããŠããŸããããŸãçéã§ããGo çã ãšå®æž¬ã§ FNV1 ãã 6 å以äžéãã£ãã§ã ... ãŸããã
ã¡ãªã¿ã«ãã»ãã¥ãªãã£ç®çã§ã¯ãªãïŒæå·åŠçããã·ã¥ãæ±ããªãïŒã®ã§ããã°ãxxHash ã® xxHash3 (XXH3) ã BLAKE3 以äžã«å§åçãªé床ãèªã£ãŠããã®ã§ãããããäºææ§ããã CRC ããéããŠä»£æ¿ãšãªãããã·ã¥ãæ±ããŠãã人ã«ã¯ãªã¹ã¹ã¡ã§ãã[å®è£ èšèª]
ãããOS éãããã°ã©ã èšèªéã®äºææ§ããŸã£ããç¡èŠããã®ã§ããã° rapidhashïŒwyhash ã®åŸç¶ïŒãšãã£ã C++ ã«ç¹åããã¢ã«ãŽãªãºã ããããæ²Œã«ãããããšåãåãã§ãã
- ð
-
ãã¹ã¯ãŒãç®ç
-
ð Argon2 @ WikipediaïŒ2015 幎 PHC åè , å¯å€é·, 2021/03/01 çŸåšïŒ
-
ãã¹ã¯ãŒãã»ããã·ã¥[?]ã®åŒ·åºŠã§äžçªåŒ·ãã¢ã«ãŽãªãºã
ïŒéããšã¯èšã£ãŠãªãïŒ -
NIST ã§æšå¥šãããŠãã PBKDF2 ã¯åŒ·ããªãã®ïŒ
NIST ã® 800-132ããã¹ã¯ãŒãã«åºã¥ãéµã®å°åºã«é¢ããæšå¥šã ã§ PBKDF2 ãæšå¥šãããŠããããšããããããã¹ã¯ãŒãã®ä¿åã« PBKDF2 ã䜿ããã±ãŒã¹ãèŠãããŸãã
ç¹ã« OWASPïŒ Web ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ã«é¢ããæ å ±ããšããŸãšããã³ãã¥ããã€ã®ãããžã§ã¯ãïŒãäœæããŠããããŒãã·ãŒããPassword Storage Cheat Sheetãã«ãFIPS-140 ãžã®æºæ ãå¿ èŠãªå Žåã¯ãæäœã§ãã¯ãŒã¯ãã¡ã¯ã¿ãŒïŒã€ãã¬ãŒã·ã§ã³æ°ïŒã 600,000 以äžãå éšããã·ã¥é¢æ°ã« HMAC-SHA-256 以äžãèšå®ãã PBKDF2 ã䜿çšããããšããšæžããŠããããšãããããã®èšå®ãªãããã¹ã¯ãŒãã®ä¿åã«äœ¿ã£ãŠããããšåéããã¡ãããã¿ãŒã³ã§ãã確ãã«ãããã ã匷ãèšå®ããã°ãã¹ã¯ãŒãä¿åã«ã倧äžå€«ãªæ°ãããŠããŸããããããšãèªã¿åããŸãã
ããããSP 800-132 ã§èšã£ãŠããã®ã¯ãããªãã®ã¢ãžã¥ãŒã«ãããã¹ã¯ãŒãããéµãå°åºããå¿ èŠããããªããæäœéãã®èšå®ã® PBKDF2 ã䜿ããªããš FIPS-140 ã«æºæ ããŠãããšã¿ãªããªããã§ãããããã¹ã¯ãŒãã®ä¿åã«äœ¿ãããšã¯ãã©ãã«ãæžããŠãªãã®ã§ããèšãæãããšãããšããã¹ã¯ãŒãä¿åã«ããããããã® Argon2idããå©çšããŠããŠããå éšã®éµå°åºã«ïŒäžèšã®æäœéèšå®ã§ïŒPBKDF2 ã䜿çšããŠããªãå Žåã¯ãFIPS-140 ã«æºæ ããªããšèšãããšã§ãã
ã€ãŸããéµã®å°åºã«äœ¿ãããšãæšå¥šãããŠããã ãã§ãPBKDF2 ã¯ããã¹ã¯ãŒãã®ä¿åãã«ã¯æšå¥šãããŠããªãã®ã§ãã
ã§ã¯
PBKDF2ãšArgon2idã®äœãéãã®ããšèšããšãããã·ã¥å€ãã®å©çšç®çã§ããPBKDF2ã¯KDFïŒKey Derivation Functionãéµå°åºé¢æ°ãéµæŽŸç颿°ïŒã«å±ããArgon2idã¯PHFïŒPassword Hash Functionsããã¹ã¯ãŒãããã·ã¥é¢æ°ïŒã«å±ããŸãããKDFããPHFãã¯ãã©ã¡ããããã·ã¥å€ãè¿ããŸãããããã埮åŠã§éèŠãªæå³åãã®éãããããŸãã
KDFã¯ãé åãããŒããªã¥ãŒå DB ãšãã£ããKeyïŒéµïŒãš ValueïŒå€ïŒã®ã»ããã«å¿ èŠãª Key ããåŒæ°ããæŽŸçïŒçæïŒããããã«äœ¿çšããã颿°ã§ããPBKDF ã¯ãã®äžäŸã§ãäž»ã«ãã¹ã¯ãŒãããå®å šãªéµïŒããŒïŒãå°åºããããã«äœ¿çšããã颿°ã§ãã
äŸãã°ããã¹ã¯ãŒãã«çŽã¥ããããŒã¿ã®ä¿åããèªèšŒãªã©ã®çŽä»ãç®çã§éµïŒããŒïŒã掟çãããããã«åºãæ¡çšãããŠãã颿°ã§ããããããPBKDF ã¯äž»ã«éµãå°åºããããšãç®çã§ããããããã¹ã¯ãŒããå®å šã«ä¿åããããã«ã¯è¿œå ã®æé ãå¿ èŠã«ãªããŸããäžæ¹ãããã¹ã¯ãŒãããã·ã¥é¢æ°ãã¯ããã¹ã¯ãŒããæ€èšŒå¯èœãªããã·ã¥å€ã«å€æããããã«äœ¿çšãããŸãããã¹ã¯ãŒãããã·ã¥é¢æ°ã¯éåžžããã¹ã¯ãŒãã®å®å šãªä¿åã«äœ¿çšããããã¹ã¯ãŒãã®å¹³æãä¿åããããšãªããããã·ã¥å€ãæ¯èŒããããšã§èªèšŒãè¡ããŸãã
ãã¹ã¯ãŒãããã·ã¥é¢æ°ã®ãã¡ãArgon2id ã¯ãPHC åè ã§ãããã¹ã¯ãŒãããã·ã¥é¢æ°ã§ããArgon2id ã¯ããã¹ã¯ãŒããããã·ã¥åããéã«ã¡ã¢ãªããŒã¹ã®é¢æ°ãšããŠèšèšãããé«ãã»ãã¥ãªãã£ã¬ãã«ãšèæ§ãæã£ãŠããŸãã
ç·æ¬ãããšãPBKDF2 ã¯éµæŽŸçã®ããã®é¢æ°ã§ããããã¹ã¯ãŒãã®ä¿åã«ã¯é©ããŠããŸãããäžæ¹ãArgon2id 㯠PHC ã§åªåããå®å šãªãã¹ã¯ãŒãããã·ã¥é¢æ°ã§ããããã¹ã¯ãŒãã®å®å šãªä¿åã«äœ¿çšããããšãã§ããŸãã
-
æå㪠bcrypt ãããã¡ïŒ
PBKDFã¯ãã¹ã¯ãŒãä¿åã«é©ããŠããªãã®ã¯ããã£ããã®ã®ãã§ã¯ãã¹ã¯ãŒãä¿åã®èèã§ããbcryptã¯ãšèšããšãéæšå¥šã«ã¯ãªã£ãŠããŸããïŒ2025 幎 08 æçŸåšïŒãbcrypt 㯠1999 幎ã«ç»å Žãã20 幎以äžã«ãããå®éçšãããŠããå®çžŸããããŸãããŸããããããã®ãã¬ãŒã ã¯ãŒã¯ãã©ã€ãã©ãªã«æšæºã§çµã¿èŸŒãŸããŠãããOWASP ã®ããŒãã·ãŒãã§ã Argon2 ã䜿ããªãæ§ç°å¢ã§ã®ä»£æ¿ã¢ã«ãŽãªãºã ãšããŠæå®ãããŠãããããŸã å®å šã«äœ¿ããããšèŠãªãããŠããŸããSHA-2 ã·ãªãŒãºã® SHA256 ã SHA512 ãšåãæ±ããšèããŠè¯ãã§ãããã
ãšã¯ããã20 幎以äžåã®å€ãèšèšã§ãããCPU ã®ã¿ã䜿ã£ãé 延調æŽãGPU ã ASIC ã«ããäžŠåæ»æã«åŒ±ããšãããŸããã€ãŸãããã€ãã€ã³ãããšãå¢ããŠããæŒç®åã«å¯ŸããŠãç°ãªãã¢ã«ãŽãªãºã ã§ä»ã®ãã¡ãã䜵çšããŠåãããšããæå³ã§ãã
ç¹ã«è¿å¹ŽããHarvest now, decrypt laterããšããã¹ãã«ã¹é å»¶åã®æ»æãå¢ããŠããŸããããã¯ãCollect now, decrypt laterããšèšãæãããšããããããã®ã§ãããããŸã®ãã¡ã«æå·ãããã·ã¥ããŒã¿ãåéããŠãããããšã§ïŒæä»£ããããïŒåŸ©å·ãããšãããã®ã§ããããŸã®æç¹ã§ã¯åéãããã ããªã®ã§ãå®å®³ã«æ°ã¥ãã¥ããæ»æã§ãã
-
-
-
TS; DR ã§ã¯ããã·ã¥é¢æ°ãå®å šã«çè§£ããæ°ã«ãªããåºç€ç¥èãšå¿çšäŸãèªããŸãã
- èªã¿ç©ã§ããããããé·ãã®ã§ããŽãå¯ããŠèªãã§ãã ãããã»ãã¥ãªãã£åŠãæå·åŠä»¥åã®åºç€ãã€ãŸãããã·ã¥é¢æ°ã®åºæ¬äžã®åºæ¬ã説æããŠããŸãã
èªã¿çµãããšãããã·ã¥äœ¿ãã«ãªã£ãæ°ã«ãªãããããã¯ãã§ãŒã³[?]ïŒå°åž³åŒåæ£ããŒã¿ããŒã¹ïŒã®ä»çµã¿ã®çè§£ãNFT[?]ïŒåæ£æææš©ç®¡çã·ã¹ãã ïŒã®ä»çµã¿ãå®å šã«çè§£ã§ããæ°ã«ãªããŸããããã«ã¯ IPFS[?]ïŒåæ£ãã¡ã€ã«ã»ã·ã¹ãã ïŒã䜿ããæ°ã«ãªããŸããgitïŒåæ£ããŒãžã§ã³ç®¡çã·ã¹ãã ïŒã䜿ãã人ã«ã¯ããããã
- èªã¿ç©ã§ããããããé·ãã®ã§ããŽãå¯ããŠèªãã§ãã ãããã»ãã¥ãªãã£åŠãæå·åŠä»¥åã®åºç€ãã€ãŸãããã·ã¥é¢æ°ã®åºæ¬äžã®åºæ¬ã説æããŠããŸãã
- ããã·ã¥é¢æ°ãšã¯ïŒ ããã·ã¥é¢æ°ã®åºæ¬ã»ç¹åŸŽ
- ãªãã§é·ããªã®ïŒïŒ ããã·ã¥é¢æ°ã®å¿çš
-
nãã€ãã£ãŠ HEX æååã§æå€§äœæåã ã£ãïŒïŒ- åçŽã«
nãïŒåããŠãã ããã
ïŒãã€ãïŒ0xFFãäŸïŒ4ãã€ãïŒHEXã§8æ¡ïŒFF FF FF FF
- åçŽã«
- ãªã«ïŒ
4DrlXã®ãããªçãããã·ã¥å€ãäœãããïŒïŒ- ããã·ã¥å€ã n 鲿°ã«å€æããŠé ã®æ°æåã䜿ãã®ãããããã
- ãã®èšäºã¯ããâ€ïžãïŒæ§ LGTMïŒãä»ããã³ã«ãäœãããèŠçŽããããæãå ããŠã¹ãã€ã©ã«ã»ã¢ãããããŠããŸãããã®ããé©å®å 容ãå€ãããŸãã倿Žéç¥ãéããŸããã®ã§ãã¹ããã¯ãã ãã£ãæ¹ã¯ãæãªæã«ããŸãèŠãã«æ¥ãŠãã ããã
ããã·ã¥ã»ã¢ã«ãŽãªãºã ãšãããé·ã®äžèЧ
ïŒããã·ã¥å€ã®é·ãäžèЧïŒ
ããã·ã¥ã»ã¢ã«ãŽãªãºã äžèЧ
- ãã®ã»ã¯ã·ã§ã³ã¯ WIP ã§ã
ãããããâ€ïžããé ããã®ã§ "List of hash functions" @ Wikipedia ã®åèš³+èªåãªãã«èª¿ã¹ãåèãèŒããŠãããããšæããŸããããéäžã§ãããã®ã§ãâ€ïžããã€ããã³ã«å°ããã€å å®ããŠãããããšæããŸãã
ãã§ãã¯ãµã ç³»ïŒCheck Sum, èª€ãæ€åºç¬Šå·ïŒ
| ã¢ã«ãŽãªãºã å ïŒé¢æ°åå«ãïŒ |
ããŒã¿é· | ç®åºã¿ã€ã ïŒç³»çµ±ïŒ |
åè |
|---|---|---|---|
| sum8 | 8 bits | sum |
sum8 ã¯ãåçŽãªãã§ãã¯ãµã ãã¢ã«ãŽãªãºã ã®ãã¡ã代衚çãªã¢ã«ãŽãªãºã ã® 1 ã€ãæ€èšŒãããããŒã¿ã 8 ãããã®å·Šã·ãããã€ãŸãé ãã 1 ãã€ãïŒ8 ãããïŒåäœã§åãåºããŠåŸãããæ°å€ãå ç®ããŠããããã®åèšå€ã« SUM8 ã®ããã·ã¥å€ãããã«å ç®ãããšãæçµåèšã®æ«å°Ÿ 8 ãããã 0 ã«ãªãã¢ã«ãŽãªãºã ãSUM8 ã®å€ã®äœãæ¹ã¯ãåãããã«æ€èšŒããŒã¿ãé ãã 8 ãããããšã«ã·ããããªããåŸãå€ãå ç®ããŠãããåèšã®äžäœ 8 ããããåãåºããåãåºããå€ããããå転ãããŠãã 1 ãå ããå€ã®äžäœ 8 ãããïŒ2 ã®è£æ°ïŒã SUM8 ã®å€ïŒããã·ã¥å€ïŒãšããŠäœ¿ããããã·ã¥å€ãšèšããªããããã ã®è¶³ãç®ã§ããããã®ãããéãããã€ã³ãã¯ãSUM å€ã¯åèšã®äžäœ 8 ãããã®è£æ°ïŒãããè¶³ããš 1 æ¡äžããå€ïŒã«ãªãããã確èªåŽã¯ããã¹ãŠå ç®ããŠããæ«å°Ÿ n æ¡ã 0 ã§ããã確èªããã ããªã®ã§ãå®è£
ãæ¥œã§åŠçãéããïŒãªã³ã©ã€ã³ã§èšç®ãèŠãŠã¿ã, GoïŒãã®ããã«ãåçŽãªè¶³ãç®ã§ãããããããŒã¿ã®äžŠã³é ã¯é¢ä¿ãªããªãïŒ 1+2+3 = 2+1+3ïŒã0 ã®äžŠãã ããŒã¿ã®éãïŒ1+0+0+0+1 = 1+1ïŒãæ€ç¥ã§ããªããã€ãŸã sum 系㯠0 ã®å€ãããŒã¿ã 1 ãã€ãæåã®äžŠã³ã«åŒ±ãã¢ã«ãŽãªãºã ã§ããããã®ããè¡çªãïŒç°ãªãåŒæ°ã§åãå€ãè¿ãïŒããããæå³çãªæ¹ç«ã«ã¯æ¥µããŠåŒ±ããããããããŒã¿ç Žæã®æ€åºçèªäœã¯åçŽèšç®ã§ 99.6% 以äžãããèšç®ããããé«éã§ãããããç°¡æãªèª€ãæ€åºã§é床ãå¿
èŠãªå Žåã«äœ¿ããããTCP/IP ã® IP ãã±ããã転éïŒã«ãŒãã£ã³ã°ïŒããéã®ç¢ºèªãªã©ã§äœ¿ãããã |
| sum16 | 16 bits | sum | äžèšã® 16 ãããç |
| sum24 | 24 bits | sum | äžèšã® 24 ãããç |
| sum32 | 32 bits | sum | äžèšã® 32 ãããç |
| BSD checksum (Unix) | 16 bits | sum |
BSD checksum ã¯ãå·¡åã·ããã«ããå·¡å笊å·ã®ãã§ãã¯ãµã ã»ã¢ã«ãŽãªãºã ã§ãããå·¡åã·ãããšã¯ãããã䞊ã³ã 1 ãããããããæŒãåºãããããããå察åŽã®é ãããã¯æ«å°Ÿã«æã£ãŠãããããæäœã§ããïŒå³å·¡åã®ã·ããäŸ: 1011 â 1101 â 1110 â 0111 â 1011 â ... 以äžåæïŒãå€ããã BSD ã«å®è£ ãããŠãã sum ã³ãã³ã ãªã©ã§äœ¿ãããŠãããBSD checksum ïŒ16 ãããçïŒ ã®å€ã®äœãæ¹ã¯ãæ€èšŒãããããŒã¿ãäžäœãã 16 ããããã€èªã¿èŸŒã¿å ç®ããŠããããå ç®ããåã«åèšå€ãå³å·¡åã·ããããããã®å³å·¡åã·ããããåèšå€ã«ãèªã¿èŸŒã¿å€ãå ç®ãããåèšå€ã 16 ãããã«ããªãã³ã°ãããã€ãŸããåèšå€ã®æ«å°Ÿ 16 ããããæãåºãããã®ïŒ16 bit ãªã 1111111111111111 ã®ãã¹ã¯ã AND æŒç®ãããã®ïŒãçŸåšã®åèšå€ãšãããããŒã¿ã®èªã¿èŸŒã¿ãçµãã£ãããããããã§ãã¯ãµã åã®ããã·ã¥å€ãšããããããŠããã£ãŠããããšã¯ããã¯ãè¶³ãç®ãªã®ã§ãããBSD checksum 㯠sum32 ããã¯åŒ·ããã®ã®ãåŸè¿°ãã CRC-32 åã® cksum ã³ãã³ãããããšã©ãŒæ€ç¥ã匱ããsum32 CRC åæ§ã«æ¹ç«èæ§ã¯ãªããã€ãŸãã1ãã€ãæåã®é åºã®å€æŽãããã¹ãŠã®ãããããŒãã«èšå®ãããã¯ãŒãã®æ¿å
¥ãŸãã¯åé€ã«ããäœçœ®èª¿æŽãªã©ãäžåºŠã«å€ãã®ãããã«åœ±é¿ããããã€ãã®äžè¬çãªãšã©ãŒãæ€åºã§ããªããããåçŽãªãã§ãã¯ãµã ãã®éšé¡ã«å
¥ãã |
| SYSV checksum (Unix) | 16 bits | sum |
å·¡åã·ããã«ããå·¡å笊å·ã®ãã§ãã¯ãµã ã»ã¢ã«ãŽãªãºã ãSystem V ã®åæããå®è£
ãããŠãã sum ã³ãã³ã ãªã©ã§äœ¿ãããŠãããCRC-32 åã® cksum ã³ãã³ãããããšã©ãŒæ€ç¥ã匱ããCRC åæ§ã«æ¹ç«èæ§ã¯ãªãããåçŽãªãã§ãã¯ãµã ãã®éšé¡ã«å
¥ãã |
| fletcher-4 | 4 bits | sum |
Adler-32 ã®ååãšããªã£ããã§ãã¯ãµã ã»ã¢ã«ãŽãªãºã ãåçŽãªãã§ãã¯ãµã ãããèšç®ã³ã¹ãã¯é«ããªããã®ã®ä¿¡é Œæ§ãé«ããfletcher ã®å€ã®å
·äœçãªäœãæ¹ïŒå®è£
ãµã³ãã«ïŒã¯ fletcher-16 ãåç
§ãããšããŠãããã§ã¯æŠèŠã説æããããŸã n ãããããšã«èªã¿èŸŒãã å
¥åããŒã¿ãã2 çµã®å€æ°ã«åã
ç°ãªãçµã¿åããã§å ç®ãè¡ãã宿°ã§å°äœïŒmod, %ïŒæŒç®ãããã®ãç¹°ãè¿ãè¡ããæçµçã«ãã® 2 çµã¿ãäžäœããããšäžäœãããã«å²ãåœãŠããã®ãããã·ã¥å€ã§ããããŸããfletcher ã®ããã·ã¥å€ã䜿ã£ãããŒã¿ã®ç Žæã®ç¢ºèªã¯ãããã·ã¥å€ããããã«åŸãããå€ãããªãªãžãã«ã®ããŒã¿ã«ä»ãå ããŠåã fletcher ã®é¢æ°ã«éããšå€ããŒãã«ãªãããšã§ãããŒã¿ç Žæãæ€èšŒã§ãããfletcher-8 ã fletcher-16 㯠TCP ã®ãã§ãã¯ãµã ã®ãªãã·ã§ã³ã® 1 ã€ã«ãæ¡çšãããŠãã1ãSolaris ç³»ã®ãã¡ã€ã«ã·ã¹ãã ã®ãã§ãã¯ãµã ãšããŠãæ¡çšãããŠããã䜿ããã宿°ã«ã¯ãçŽ æ°ã®ç©ïŒåææ°ïŒãå©çšããããªãšãŒã·ã§ã³ãããã |
| fletcher-8 | 8 bits | sum | |
| fletcher-16 | 16 bits | sum | Go èšèªã«ããå®è£ ãµã³ãã«ãèŠã |
| fletcher-32 | 32 bits | sum | |
| Adler-32 | 32 bits | sum | zlib ã®å§çž®ã©ã€ãã©ãªã®å§çž®ãå±éïŒè§£åã®ãã§ãã¯ã®ããã« fletcher-16 ãæ¹åããŠéçºããããä¿¡é Œæ§ãšåŒãæãã«é«éæ§ã远æ±ããŠããã¿ã€ããåãé·ãã® CRC ãããéããä¿¡é Œæ§ã¯ fletcher-16 ãš fletcher-32 ã®äžéããããIETF ã® RFC1950 ã§å®çŸ©ãããŠãããçŽ æ°ã®å°äœïŒmod)ãå©çšããŠããã |
| xor8 | 8 bits | sum |
LRCïŒLongitudinal Redundancy Checkãæ°Žå¹³åé·æ€æ»ïŒãšãåŒã°ããèšç®æ¹æ³ã¯ ISO 1155 ã§å®çŸ©ãããŠãããsum8 ã«äŒŒãŠãããã®ã®ãå ç®æã« 8 ãããïŒ0xFFïŒã®ãã¹ã¯ãåèšå€ã«ãããããšã§åèšå€ããªãŒããŒãããŒããªãããšãšããã§ãã¯ãµã ãç®åºããéã® 2 ã®è£æ°ã®ç®åºæã« XOR ã䜿ã£ãŠããã®ãç¹åŸŽãå
·äœçã«ã¯åèšã«ãã¹ã¯å€ïŒ0xFFïŒã XOR åŸ +1 ããäžäœ 8 ãããããã§ãã¯ãµã ãšãããXOR8 ã sum8 åæ§ã« 8 ãããããšã®å ç®å€ã«ãããã«ãã§ãã¯ãµã å€ãå ãããšæ«å°Ÿ 8 ãããã 0 ã«ãªããïŒãªã³ã©ã€ã³ã§èšç®ãèŠãŠã¿ã, GoïŒISO 7816 ã«æºæ ãã IC ã«ãŒãã®èªã¿åãããã€ã³ã¿ãŒãããã® PPP æ¥ç¶æã®ã·ãªã¢ã«ä¿¡å·ïŒRFC1134ïŒã®ãã§ãã¯ã«äœ¿ãããŠããã |
| Luhn algorithm | 1 decimal digit | sum | |
| Verhoeff algorithm | 1 decimal digit | sum | |
| Damm algorithm | 1 decimal digit | Quasigroup operation |
CRC ç³»ïŒCyclic Redundancy Check, å·¡ååé·æ€æ»ïŒ
| ã¢ã«ãŽãªãºã å ïŒé¢æ°åå«ãïŒ |
ããŒã¿é· | ç®åºã¿ã€ã ïŒç³»çµ±ïŒ |
åè |
|---|---|---|---|
| cksum (Unix) | 4 Byte (32 bit) | CRC | åæ®ã§ checksum ãšä»ããŠããããPOSIX:2008 (IEEE Std 1003.1-2008) ã«æºæ ãã CRC-32 ã¢ã«ãŽãªãºã ã䜿ã£ãã³ãã³ãã§ãããã CRC ã«åé¡ããããæ¹ç«èæ§ã¯ãªããç°¡åã«è¡çªïŒããšãªãå€ã§åãåºåã«ïŒãããããšãã§ããã |
| CRC-8 | 1 Byte (8 bit) | CRC | ãããã CRCïŒCyclic Redundancy Checkãå·¡ååé·æ€æ»ïŒç³»ã®å
žåçãªã¢ã«ãŽãªãºã ã® 1 ã€ãCRC ã® CyclicïŒå·¡åïŒã¯ãCRC-n ã®å ŽåãããŒã¿ãäžäœãã n ãããã¶ãã 1 ããããã€ãºã©ããªããåç
§ããŠæŒç®ããŠãããããå·¡åããšåŒã°ãããåè¿°ã®ãã§ãã¯ãµã ç³»ã¢ã«ãŽãªãºã ãè¶³ãç®ïŒå ç®ïŒãããŒã¹ã«ããŠããã®ã«å¯Ÿããå²ãç®ïŒé€ç®ïŒãããŒã¹ã«ããŠããã¢ã«ãŽãªãºã ã§ãäœããããã·ã¥å€ãšããç¹æ®ãªå°äœç®ã§ãããCRC ã®æŒç®ã®ãã€ã³ã㯠2 ã€ããããã®ãå²ãæ¹ã®å€ãïŒä»¥äžã逿°ãã divisorïŒã®ç®åºæ¹æ³ãšãå®éã® CRC ã®èšç®æ¹æ³ã§ããã逿°ã®å€ã¯å®æ°ã䜿ãããããè€æ°ã®ããªãšãŒã·ã§ã³ïŒã¿ã€ãïŒããããããããå€é åŒãçšããŠç®åºããã宿°ã§ããããããã®ã¿ã€ãã®é€æ°ã§ããé·ã㯠n ããã + 1 ã®é·ãã§ãããïŒCRC-8 ã®å Žå㯠9 ãããïŒ CRC ã®èšç®æ¹æ³ã¯ãå²ãç®ã®çç®ãïŒä¹é€æ³ïŒã«è¿ãæ¹æ³ã䜿ããã€ãŸãã察象ã®å€ã®å·Šãã逿°ãšåãæ¡æ°ã¶ããå²ãããã®çµæãåæ ãã㊠1 æ¡ããããŠãç¹°ãè¿ãæ¹æ³ã«è¿ããå²ã代ããã« XOR ãããXOR ã§å²ãç®ã§ããã®ã¯ãå²ãç®ã¯åŒãç®ã®é£ç¶ã§ããããšã«å ããçç®äž 0 ãš 1 ã ãã§èšç®ãããããåãããçºçããªãã®ã§ GF(2) ã®ã¬ãã¢äœãšãããã¯ããã¯ïŒäœç³»ïŒã䜿ããããã§ãããå ·äœçã«ã¯ CRC-8 ã®å ŽåããŸãããŒã¿ã®äžäœ 8 ããããåç §ãããã®å€ã®å·Šç«¯ã® 1 ãããã 1 ã®å Žåã¯é€æ°ãš XOR ããå€ãšå ¥ãæ¿ããã0 ã®å Žåã¯äœãããªãïŒæ¬¡ã«é²ãïŒã次ã«åç §å ãå³ã« 1 ãããããããŠåæ§ã« 8 ãããã¶ããåç §ããããšãäžçªå³ã«èŸ¿ãä»ããŸã§ç¹°ãè¿ããã€ãŸããé²ããããšã«å€ã®å·Šç«¯ãã©ãã©ã 0 ã«ãªã£ãŠããïŒå ·äœäŸïŒããããŠãæçµçµæã®äžäœ 8 ãããã CRC-8 ã®å€ãšããŠäœ¿ãããã CRC ç³»ã¯é£ãåããã®ããŒã¿ãåç §ããŠããããã sum ç³»ã«æ¯ã¹ããšããŒã¿ã®äžŠã³é ã«åŒ·ããã®ã®ãé¢ããäœçœ®ã®éãã¯æ€ç¥ãã«ããïŒåãçãã«ãªãããšãããïŒããã®ãããæ¹ç«èæ§ã¯ãªãããããŒã¹ãïŒçªçºçãªåŒ·ããã€ãºïŒãªã©ã«ããäžéšã®ããã䞊ã³ãå€ãã£ãå Žåã®æ€ç¥ã«ã¯åŒ·ããããã·ãªã¢ã«éä¿¡ã®ãã§ãã¯ãµã å€ãšããŠã䜿ãããã |
| CRC-16 | 2 Byte (16 bit) | CRC | CRC ã® 16 ãããçãã·ãªã¢ã«éä¿¡ç³»ãããã³ã«ã®ããŒã¿ãã§ãã¯ã«ãã䜿ãããã逿°ãšããŠäœ¿ã宿°ã®ç®åºã«äœ¿ãããå€é
åŒã«ã¯ããã¯ãããªãšãŒã·ã§ã³ããããCRC-16 㯠22 åãç¥ãããŠãããæåãªããªãšãŒã·ã§ã³ãšããŠãCRC-16-IBM ã® X16+X15+X2+1 㯠USB ã PLCã®ãã§ãã¯ã«äœ¿ãããCRC-16-CCITT ã® X16+X12+X5+1 㯠Bluetooth ã SD ã«ãŒããªã©ã®ãã§ãã¯ã§äœ¿ããããïŒãªã³ã©ã€ã³ã§CRC-16-IBMã®èšç®ãèŠãŠã¿ã, GoïŒ
|
| CRC-32 | 4 Byte (32 bit) | CRC | |
| CRC-32 MPEG-2 | 4 Byte (32 bit) | CRC | |
| CRC-64 | 8 Byte (64 bits) | CRC |
- Adler-32 㯠CRC ã§ãããšæãããŠããŸãããå®è³ªçã«ã¯ãã§ãã¯ãµã ã®éšé¡ã«åé¡ãããŸãã
Universal hash function families
| ã¢ã«ãŽãªãºã å ïŒé¢æ°åå«ãïŒ |
ããŒã¿é· | ç®åºã¿ã€ã ïŒç³»çµ±ïŒ |
åè |
|---|---|---|---|
| Rabin fingerprint | variable | multiply | |
| tabulation hashing | variable | XOR | |
| universal one-way hash function | |||
| Zobrist hashing | variable | XOR |
Non-cryptographic hash functions
| ã¢ã«ãŽãªãºã å ïŒé¢æ°åå«ãïŒ |
ããŒã¿é· | ç®åºã¿ã€ã ïŒç³»çµ±ïŒ |
åè |
|---|---|---|---|
| Pearson hashing | 8 bits (or more) | XOR/table | |
| Paul Hsieh's SuperFastHash[1] | 32 bits | ||
| Buzhash | variable | XOR/table | |
| FowlerâNollâVo hash function (FNV Hash) | 32, 64, 128, 256, 512, or 1024 bits | xor/product or product/XOR | |
| Jenkins hash function | 32 or 64 bits | XOR/addition | |
| Bernstein's hash djb2 | 32 or 64 bits | shift/add or mult/add or shift/add/xor or mult/xor | |
| PJW hash / Elf Hash | 32 or 64 bits | add,shift,xor | |
| MurmurHash | 32, 64, or 128 bits | product/rotation | |
| Fast-Hash | 32, 64 bits | xorshift operations | |
| SpookyHash | 32, 64, or 128 bits | see Jenkins hash function | |
| CityHash | 32, 64, 128, or 256 bits | ||
| FarmHash | 32, 64 or 128 bits | ||
| MetroHash | 64 or 128 bits | ||
| numeric hash (nhash) | variable | division/modulo | |
| xxHash | 32, 64, 128 bits | product/rotation | |
| t1ha (Fast Positive Hash) | 64 and 128 bits | product/rotation/XOR/add | |
| pHash | fixed or variable | see Perceptual hashing | |
| dhash | 128 bits | see Perceptual hashing | |
| SDBM | 32 or 64 bits | mult/add or shift/add | also used in GNU AWK |
Keyed Cryptographic Hash Functions
| ã¢ã«ãŽãªãºã å ïŒé¢æ°åå«ãïŒ |
ããŒã¿é· | ç®åºã¿ã€ã ïŒç³»çµ±ïŒ |
åè |
|---|---|---|---|
| BLAKE2 | arbitrary | keyed hash function (prefix-MAC) | |
| BLAKE3 | arbitrary | keyed hash function (supplied IV) | |
| HMAC | |||
| KMAC | arbitrary | based on Keccak | |
| MD6 | 512 bits | Merkle tree NLFSR | |
| One-key MAC (OMAC; CMAC) | |||
| PMAC (cryptography) | |||
| Poly1305-AES | 128 bits | nonce-based | |
| SipHash | 32, 64 or 128 bits | non-collision-resistant PRF | |
| HighwayHash | 64, 128 or 256 bits | non-collision-resistant PRF | |
| UMAC | |||
| VMAC |
Unkeyed cryptographic hash functions
| ã¢ã«ãŽãªãºã å ïŒé¢æ°åå«ãïŒ |
ããŒã¿é· | ç®åºã¿ã€ã ïŒç³»çµ±ïŒ |
åè |
|---|---|---|---|
| BLAKE-256 | 256 bits | HAIFA structure[14] | |
| BLAKE-512 | 512 bits | HAIFA structure[14] | |
| BLAKE2s | up to 256 bits | HAIFA structure[14] | |
| BLAKE2b | up to 512 bits | HAIFA structure[14] | |
| BLAKE2X | arbitrary | HAIFA structure,[14] extensible-output functions (XOFs) design[15] | |
| BLAKE3 | arbitrary | Merkle tree | |
| ECOH | 224 to 512 bits | hash | |
| FSB | 160 to 512 bits | hash | |
| GOST | 256 bits | hash | |
| GrÞstl | up to 512 bits | hash | |
| HAS-160 | 160 bits | hash | |
| HAVAL | 128 to 256 bits | hash | |
| JH | 224 to 512 bits | hash | |
| LSH | 256 to 512 bits | wide-pipe MerkleâDamgÃ¥rd construction | |
| MD2 | 128 bits | hash | |
| MD4 | 128 bits | hash | |
| MD5 | 128 bits | MerkleâDamgÃ¥rd construction | |
| MD6 | up to 512 bits | Merkle tree NLFSR (it is also a keyed hash function) | |
| RadioGatún | arbitrary | ideal mangling function | |
| RIPEMD | 128 bits | hash | |
| RIPEMD-128 | 128 bits | hash | |
| RIPEMD-160 | 160 bits | hash | |
| RIPEMD-320 | 320 bits | hash | |
| SHA-1 | 160 bits | MerkleâDamgÃ¥rd construction | |
| SHA-224 | 224 bits | MerkleâDamgÃ¥rd construction | |
| SHA-256 | 256 bits | MerkleâDamgÃ¥rd construction | |
| SHA-384 | 384 bits | MerkleâDamgÃ¥rd construction | |
| SHA-512 | 512 bits | MerkleâDamgÃ¥rd construction | |
| SHA-3 (subset of Keccak) | arbitrary | sponge function | |
| Skein | arbitrary | Unique Block Iteration | |
| Snefru | 128 or 256 bits | hash | |
| Spectral Hash | 512 bits | wide-pipe MerkleâDamgÃ¥rd construction | |
| Streebog | 256 or 512 bits | MerkleâDamgÃ¥rd construction | |
| SWIFFT | 512 bits | hash | |
| Tiger | 192 bits | MerkleâDamgÃ¥rd construction | |
| Whirlpool | 512 bits | hash |
ããã·ã¥å€ã®é·ãäžèЧãšé床ã®ç®å®
ãã¹ãŠåãã¡ãã»ãŒãžãããã·ã¥åãããã®ïŒãHello Qiita!ãã®ããã·ã¥å€ïŒãªã®ã«ãããã·ã¥å€ã®é·ããã€ãŸããããé·ãåãã§ãå€ããŸã£ããç°ãªãããšã«æ³šç®ãã ããã
ð  åã¢ã«ãŽãªãºã ã® PHP 7.2.6 ã§ã®èšç®é床ãèšèŒããŠããŸãããç°å¢ã ãã§ãªã PHP ã®ããŒãžã§ã³ã«ãã£ãŠããªãé床ãç°ãªããŸããé床ã¯ç®å®çšåºŠã«ãå©çšãã ããããŸãã¯åŒ·ãã¢ã«ãŽãªãºã ã§çµãã§ããããæšæž¬ãããªã枬å®ãããã®ç²Ÿç¥ã§ãèªåã®ç°å¢ã«æé©åããããšããå§ãããŸãã
ãªããSHA-3ã«å«ãŸããSHAKE256ãªã©ã®å¯å€é·ã®ã¢ã«ãŽãªãºã ãããã³ SHA-3 ã®æçµéžèãŸã§æ®ã£ãBLAKE2ãããã®åŸç¶ã§çéãšåã®BLAKE3ã¯ããŸã ã©ã€ãã©ãªãæ¯ããŠïŒOS ãããã°ã©ã èšèªã§æµžéïŒããŠããªãããå«ããŠããŸããã
仿§
- æ€èšŒç°å¢ïŒmacOS HighSierraïŒOSX 10.13.6ïŒ, PHP 7.2.6ïŒcliïŒ, MacBookPro Early 2015, 2.7GHz Corei5, Mem 8GB 1867MHz DDR3
- ããã·ã¥ããã¡ãã»ãŒãžïŒãHello Qiita!ã
- ã«ãŒãåæ°ïŒ1,000,000 åïŒ100 äžåïŒ
- é床ïŒäžèšã«ãŒãã® 10 åã¶ãã®å¹³åå€
- 䞊ã³é ïŒæ¡æ°ã®å°ãªãé â éãé
- ã¡ãã»ãŒãžãã€ãžã§ã¹ãã¯æšªã¹ã¯ããŒã«ãããããã 8 æ¡ïŒ4ãã€ãïŒããšã®ãããã¯ã«åããŠããŸãã
- 枬å®ã®ãœãŒã¹ã³ãŒã @ Paiza.IO
8 æ¡ã®ããã·ã¥å€
| ã¢ã«ãŽãªãºã | ãã€ãé· | é床 | ããã·ã¥å€ |
|---|---|---|---|
fnv132 |
4 Byte |
0.157887 sec |
b04649f6 |
fnv1a32 |
4 Byte |
0.157962 sec |
129b42dc |
adler32 |
4 Byte |
0.165301 sec |
1bf5042e |
crc32 |
4 Byte |
0.169681 sec |
dd54ff69 |
crc32b(IEEE)
|
4 Byte |
0.172050 sec |
ad6adc0d |
joaat |
4 Byte |
0.173369 sec |
2cbbf315 |
16 æ¡ã®ããã·ã¥å€
| ã¢ã«ãŽãªãºã | ãã€ãé· | é床 | ããã·ã¥å€ |
|---|---|---|---|
fnv164 |
8 Byte |
0.168120 sec |
97bfaffd 885daad6
|
fnv1a64 |
8 Byte |
0.176964 sec |
07c72cc2 7b5f8b5c
|
32 æ¡ã®ããã·ã¥å€
| ã¢ã«ãŽãªãºã | ãã€ãé· | é床 | ããã·ã¥å€ |
|---|---|---|---|
md4 |
16 Byte |
0.284748 sec |
e2500f3f 1eb028a4 563ca3d4 35028996
|
md5 |
16 Byte |
0.337097 sec |
7c414ef7 535afff2 1e05a36b 1cfc9000
|
tiger128,3 |
16 Byte |
0.341727 sec |
60bd4df9 e039716f 07c9ecd4 4c203d34
|
tiger128,4 |
16 Byte |
0.397596 sec |
7c20d9b5 d9e79da7 b5241a08 a353018a
|
ripemd128 |
16 Byte |
0.553369 sec |
0ff7eaf1 38540680 8e92e642 28a79243
|
haval128,3 |
16 Byte |
0.954699 sec |
a8fe5c62 4c856077 d07db6bc 9a7f1275
|
haval128,4 |
16 Byte |
1.027350 sec |
b5ee64c0 6a003d55 65108356 08c6a34c
|
haval128,5 |
16 Byte |
1.197690 sec |
ad189ff3 183c9cfe cf5a39e3 45ba95f8
|
md2 |
16 Byte |
4.762099 sec |
8cd3c9c1 f1079b15 639ddab1 2227d400
|
40 æ¡ã®ããã·ã¥å€
| ã¢ã«ãŽãªãºã | ãã€ãé· | é床 | ããã·ã¥å€ |
|---|---|---|---|
sha1 |
20 Byte |
0.348829 sec |
5d8793ae d96d808a b6af8e47 5ce244e8 a604e478
|
tiger160,3 |
20 Byte |
0.367638 sec |
60bd4df9 e039716f 07c9ecd4 4c203d34 6f07e46a
|
tiger160,4 |
20 Byte |
0.399170 sec |
7c20d9b5 d9e79da7 b5241a08 a353018a bf178a02
|
ripemd160 |
20 Byte |
0.694799 sec |
99a6c172 52ae4e64 e8d22853 c54ee2ad 44089160
|
haval160,3 |
20 Byte |
0.900242 sec |
aba140dc e20ac7a2 615053de 4336e343 37a49b46
|
haval160,4 |
20 Byte |
1.033398 sec |
6bc4fecd c33d5d21 14c695ff f449d333 58f3030d
|
haval160,5 |
20 Byte |
1.197252 sec |
d87a41cb 73469426 42faf2ae 7d62e81a eba5dcc6
|
48 æ¡ã®ããã·ã¥å€
| ã¢ã«ãŽãªãºã | ãã€ãé· | é床 | ããã·ã¥å€ |
|---|---|---|---|
tiger192,3 |
24 Byte |
0.394713 sec |
60bd4df9 e039716f 07c9ecd4 4c203d34 6f07e46a 9c308ef7
|
tiger192,4 |
24 Byte |
0.410200 sec |
7c20d9b5 d9e79da7 b5241a08 a353018a bf178a02 0a74f3fb
|
haval192,3 |
24 Byte |
0.874294 sec |
e2b0c018 6b1cc119 0eebe1be 9d61953d 2dd78ba4 8136086c
|
haval192,4 |
24 Byte |
1.031765 sec |
7540fa22 a5714124 cf942e1b 31a890b9 bb59d58c e5a61157
|
haval192,5 |
24 Byte |
1.211350 sec |
e4a6b10a d8286eaf 8cb3f225 950c2f93 b6fdab8c 601626c8
|
56 æ¡ã®ããã·ã¥å€
| ã¢ã«ãŽãªãºã | ãã€ãé· | é床 | ããã·ã¥å€ |
|---|---|---|---|
sha224 |
28 Byte |
0.713225 sec |
d72d6ef7 0a788b3e 7f720b5d 88f20a13 bf161c31 b260fd34 6573094d
|
sha3-224 |
28 Byte |
0.817025 sec |
e833eab3 4fbefbe8 9e44dcf1 d4ea9990 10981761 22f51708 df9cd9d0
|
sha512/224 |
28 Byte |
0.825188 sec |
e205b15d 16eda0ce e195d210 73edca14 a69198e9 0070b9b0 09f7cb16
|
haval224,3 |
28 Byte |
0.842655 sec |
a69049ca 88565098 a6f5e2bc adb22980 e59da983 9a779b63 c214e019
|
haval224,4 |
28 Byte |
1.045480 sec |
090b25d0 e8a0f5ef ecf6b683 5be72fe5 6913b34e 2d086922 3b1ac5d1
|
haval224,5 |
28 Byte |
1.209415 sec |
5343b4b1 a16119c5 dcd7726e 53128841 fecb7607 88e9008f 6c6f2cb6
|
64 æ¡ã®ããã·ã¥å€
| ã¢ã«ãŽãªãºã | ãã€ãé· | é床 | ããã·ã¥å€ |
|---|---|---|---|
ripemd256 |
32 Byte |
0.574046 sec |
e0fe9c49 b1a59fae 47096909 83e62829 4887b161 5722a62c 2c4187be 816b058d
|
sha256 |
32 Byte |
0.668654 sec |
e863d36c 24ada694 fa77454b 33e8f9b9 545d372a ae251e87 79fc25df 16943fed
|
sha3-256 |
32 Byte |
0.824698 sec |
cedaea23 33478d77 bc9ed3e3 3303f455 85af1917 4a451ce9 3029fedc dd4d1ecb
|
sha512/256 |
32 Byte |
0.833001 sec |
aaa2e875 112de9b6 1744d4a0 ae757e40 cd12008a 0f3948fb 7c42a8cd 48c361b8
|
haval256,3 |
32 Byte |
0.845439 sec |
5f788c8a 5359387b acf7bf60 ff4dd08d e7176205 a0aae1ce 4f485b40 126c0d2f
|
haval256,4 |
32 Byte |
1.048196 sec |
4ebb9e6f a6c045b0 cbba419e f06ac973 b2fd4914 f746e142 bb6b840f bd836158
|
haval256,5 |
32 Byte |
1.218753 sec |
c99614ae a2985f43 f480d029 bcb7974b f5aface5 8730c9d6 f3141a67 58270431
|
gost |
32 Byte |
1.828385 sec |
667f4328 0ff9e0a5 9c15de57 022becf3 cd1a48f8 d37a165c 87576b6f 814fa482
|
gost-crypto |
32 Byte |
1.849877 sec |
7ebf0f97 0f1246b6 aea110d7 32cbcdfd b0169cf1 7336bae7 814e99f1 8abfbd21
|
snefru |
32 Byte |
2.841073 sec |
ad081810 0ab15234 b13b8d09 ad0c519a 35469221 adbf8c5f a71594ca f7dfddc2
|
snefru256 |
32 Byte |
2.850217 sec |
ad081810 0ab15234 b13b8d09 ad0c519a 35469221 adbf8c5f a71594ca f7dfddc2
|
80 æ¡ã®ããã·ã¥å€
| ã¢ã«ãŽãªãºã | ãã€ãé· | é床 | ããã·ã¥å€ |
|---|---|---|---|
ripemd320 |
40 Byte |
0.725499 sec |
6d152e32 fee2b979 024b8cff e416c898 16032680 779f7c3a 93c9aa26 35441245 8d4a9010 ad8fdfa5
|
96 æ¡ã®ããã·ã¥å€
| ã¢ã«ãŽãªãºã | ãã€ãé· | é床 | ããã·ã¥å€ |
|---|---|---|---|
sha384 |
48 Byte |
0.831855 sec |
b10497cf 49601678 4d8413a4 662983a8 dc4ac470 039ea755 d5ec985f 1aab04ee 26dc3d67 71bbe404 75ea7d13 5a97ba58
|
sha3-384 |
48 Byte |
0.835068 sec |
e83e54ee 323dafb5 ca2d800f d479e1cc 94502362 93d5ad74 36228519 aa657ea3 d1da8bb6 2d07035d ec1ece2f 428ec8dc
|
128 æ¡ã®ããã·ã¥å€
| ã¢ã«ãŽãªãºã | ãã€ãé· | é床 | ããã·ã¥å€ |
|---|---|---|---|
sha3-512 |
64 Byte |
0.851400 sec |
9d1aaed0 79bac194 6a5fbafb 4285ec5b dcf0053a 9e005590 46884a14 8f28fcb9 02441b49 cb3a8277 5834a244 4dd183ed a36cee90 0f5662f8 2353fae7 e7111740
|
sha512 |
64 Byte |
0.860255 sec |
cac9036c 1dd3652f c550e99a 4ec2b066 d69d6a40 a369bc85 e3078960 e6f26012 4138f5d0 f4e9a6e0 47dfb833 c9dd9b33 76d02d49 be37de26 dd6234d4 e79cc09e
|
whirlpool |
64 Byte |
1.041927 sec |
488c6cd6 eccb5348 8a7c7617 8c89d514 16b8eb2b 88a30b79 71f1f176 70e27659 fc477cd9 6ade86e4 b6176c5e f2f67068 89606786 4ce15443 eff90733 fd4fcf4c
|
TS; DR æéã®DBããŒæ€çŽ¢ãæ±ã㊠with SQLite3
ããã·ã¥å€ã®è¡çªã¯å¥ã®ã¢ã«ãŽãªãºã ã§ã¯è¡çªããªã ïŒéããªãïŒ
// å€ã埮åŠã«ç°ãªã $a ãš $b
$a = 'xxxxxxxxx..1..xxxxxxxxx'; // é·ã£ããããæåå a
$b = 'xxxxxxxxx..0..xxxxxxxxx'; // é·ã£ããããæåå b
$result_sha1 = ( hash('sha1', $a) === hash('sha1', $b) );
$result_md5 = ( hash('md5', $a) === hash('md5', $b) );
// $result_sha1 --> true, å¶ç¶ã«ãè¡çªãçºçïŒ
// $result_md5 --> false, ã¢ã«ãŽãªãºã ãç°ãªããšè¡çªããªãïŒå¯èœæ§ãé«ãïŒ
å€ãããããŠã³ããŒãã»ããŒãžãªã©ã§ãã¡ã€ã«ã®æ¹ãããç Žæããªãããæ¯ã¹ãã®ã«äœ¿ãããŠãããããã·ã¥é¢æ°ãã
身è¿ãªãšããã§ã¯ããã€ããäžè©±ã«ãªã£ãŠããããã±ãŒãžãããŒãžã£ãŒã®ããã±ãŒãžç®¡çãã¢ã¯ã»ã¹ã»ããŒã¯ã³ã®äœæããã¿ããªå€§å¥œã Git ã®ã³ãããID ãæåã§ãããããŒã¿ããŒã¹ïŒä»¥äž DBïŒã®ã¯ã©ã¹ã¿ãªã³ã°ãè² è·åæ£ãªã©ã«ã䜿ãããŠããŸãã
Linux ã®ãããã§èèã®ããã±ãŒãžãããŒãžã£ãŒã§ãã Nix ã§ã¯ãããã·ã¥å€ãå šé¢çã«äœ¿ãããšã§äŸåé¢ä¿ã培åºçã«ç®¡çããŠããŸããæè¿ãé è§ãçŸããŠãã Linux ã®ç°ç«¯å NixOS ã¯ããã®ä»çµã¿ã OS ã¬ãã«ã§äœ¿ãïŒã«ãŒãã«å«ãå šãŠã®ã·ã¹ãã ã»ãã¡ã€ã«ãããã·ã¥å€ããŒã¹ã§ç®¡çããã·ã³ããªãã¯ã»ãªã³ã¯ãè²Œãæ¿ããïŒããšã§ãç°ãªãããŒãžã§ã³ã®ãã¹ãããã©ã€ïŒãšã©ãŒãããããããŠããŸãã
ãŸããåŸè¿°ãã IPFSããããã¯ãã§ãŒã³ãããã®ããã·ã¥ã¢ããã§æ°åã³ããã®é ã«è©±é¡ã«ãªã£ã NFT ãªã©ã§ã¯èŠã®é¢æ°ãšãèšãããªã©ãããã·ã¥é¢æ°ã¯ãä»åŸãããŸããŸãªå Žé¢ã§æŽ»èºãæåŸ ããã颿°ã§ãã
ãã®èšäºã§ã¯ããããã·ã¥é¢æ°ã®åºæ¬ãšåºç€ç¥èãããããŠãããã·ã¥é¢æ°ã掻çšãã SQLite3 ã® 1 ã€ã®ã¢ã€ãã¢ããã·ã§ã¢ããããšæããŸãã
ð  2021/02/19 远èš: Qiita ã® Markdown ã®ä»æ§å€æŽã«ãããä»ãŸã§ <details> ã¿ã°ã§ãå¿
èŠãªäººã ãã¿ãããããã«é ããŠããåºæ¬çãªæ
å ±ã衚ã«è¡šç€ºãããŠããŸãããã®ããããããé·ãèšäºã«ãªã£ãŠããŸãã
ð  2021/03/05 远èš: Qiita ã® Markdown ã§ã<details> ã¿ã°ã®ä»æ§å€æŽã¯ β çã®äžæçãªãã®ã ã£ããããã®ã§ããããŸãåã
ç·šæããã®ãé¢åãªã®ã§ããã®ãŸãŸè¡šç€ºããç¶æ
ã«ããŸãã
ãšèšãã®ããQiita ã¯ç·šéæã«æ°æåæã€ãã³ã«ãã¬ãã¥ãŒãæŽæ°ããã®ã§ãããã ãé·æã®èšäºã«ãªããšç§åäœã§åäœãéããªããŸãããã®ãããéè€ãã説æãå€ãããããé·ãèšäºã®ãŸãŸã«ãªã£ãŠããŸãïŒè¿ã
git ã§ãªãŒãã³ãœãŒã¹ã«ããããèããŠããŸãïŒã
ç®æ¬¡ãèŠãŠãããã·ã¥é¢æ°ã®åºæ¬ãæŽ»çšæ¹æ³ã¯ãå®å
šã«çè§£ããããšæããæ¹ã¯ãæ¬é¡ã®ãé·ããç¥ã£ããšããã§äœïŒããŸã§ãã¹ãããããŠãã ãããçããå
ã«èšã£ã¡ãããšãããŒã¿ã®ããã·ã¥å€ n æ¡ã SQLite3 ã® rowid ã«äœ¿ããã£ãŠæš¡çŽ¢ããæã®è©±ãã§ããããã§ãèªãã§ã¿ãããšããæ¹ã¯ããŽãå¯ã§ãããªããèªãã§ãã ãããããå¯ãããšæããŸããç§ãæžããŠããŠå¯ã¡ãããŸãã
ããã·ã¥é¢æ°ãå®å šã«çè§£ããæ°ã«ãªãã³ãã±ãŒããš
ããã·ã¥å€ãšã¯ãããŒã¿ãã®ãã®ããèå¥åãšããŠäœ¿ããå€ãååŸãããå Žåã«äœ¿ãããå€ã§ãã
ïŒé£çªãªã©ã®ïŒäžæã®å€ãèå¥åãšããŠããŒã¿ã«çŽä»ããã®ã§ã¯ãªããããŒã¿ããèå¥åãåãåºãïŒç®åºããïŒé¢æ°ãããã·ã¥é¢æ°ã§ãã
ãšã¯èšããããã·ã¥é¢æ°ã¯ç°ãªãããŒã¿ã§ãåãèå¥åãè¿ãå ŽåããããŸãããªãã¹ãäžæã®èå¥åãæ¬²ããå Žåã«ã¯ããæ¬åœã«äžæã§ãããããšããé£ããåé¡ãšãªããæå·åŠçèŠçŽ ãå å³ããããããæå·åŠçããã·ã¥é¢æ°ããå©çšããå¿ èŠããããŸãã
ããã·ã¥é¢æ°ã®åºæ¬ãšç¹åŸŽ
å ã«ãäžèšã§æããã«èšããªããããã·ã¥å€ã¯ããŒã¿ã®æçŽãã§ãã
ã€ãŸããããŒã¿ã®ããã·ã¥åããšèšãã®ã¯ãããŒã¿ããæ å ±ã®æçŽãæ¡åããããšãã¿ãããªãã®ã§ããããã·ã¥å€ããšã¯æ¡åããæçŽæ å ±ã®ããšã§ãããããŒã¿ã®æå·åã§ãå§çž®ã§ããªãã®ã§ãã
ãã¡ãããããŒã¿ãªã®ã§æãæã¡ãŸããããã®ãããæçŽãããã¯ãããã·ã¥å€ã¯ããŒã¿ã®ãæ å ±çŽããšèšã£ãŠããããããããŸããã
人éã®æçŽããç¹å®ã®å人ãèå¥ããããã«äœ¿ããããã«ãããŒã¿ã®æçŽïŒããã·ã¥å€ïŒãç¹å®ã®ããŒã¿èå¥ã«äœ¿ããŸãã
笊å·åãããæ
å ±ãã€ãŸãã³ã³ãã¥ãŒã¿ãŒãèªèã§ããããŒã¿ïŒ0 ãš 1 ã®ãããã§è¡šçŸã§ããæ
å ±ïŒã§ããã°ããã¹ãã§ãããããç»åã§ãããããããã°ã©ã ã§ããããããã®ããŒã¿ããããã·ã¥å€ãåŸãããšãã§ããŸãã
人éã®æçŽã¯ãããèªäœããã¯çŽæ¥æ¬äººãç¹å®ã§ããŸããããå人æ å ±ãæã¡ãŸãããããããæ¬äººã®æçŽãšãæ¯èŒããããã察å¿è¡šãããããã°ãèª°ã®æçŽã§ãããç¹å®ã§ããŸãããããŠããããã DB ã§å人æ å ±ãšçŽã¥ããããšãã§ããŸãããšã¯èšããæ¬äººãç¹å®ã§ãããšããŠãæçŽããã¯æ¬äººã埩å ïŒã¯ããŒã³ãäœæïŒã§ããŸããã
ããã·ã¥å€ã䌌ãŠããŸããããã·ã¥å€ã ãã§ã¯å ã®å€ã¯ããããŸããããããã·ã¥å€ãæ¯èŒãããã察å¿è¡šããããã°å ã®å€ãç¹å®ã§ããŸãããŸãããããããšã«ïŒããŒãšããŠïŒDB ã«çŽã¥ããããšãã§ããŸããããã«ãããã·ã¥å€ãç¥ã£ãŠããŠããããã·ã¥å€ãã®ãã®ããã¯å ã®å€ã埩å ã§ããŸããã
ã埩å ã§ããªãããšããã®ã¯ãéç®ã§ããªãã»èšç®ã§å²ãåºããªããšããããšã§ããäŸãã°ãå²ãç®ã®äœããïŒå°äœïŒããã¯ãå ã®å€ãããããªãã®ãšäŒŒãŠããŸãã
$max = 100; // IDã®é·ãïŒæå€§å€ã¯99ã⎠2æ¡è¡šç€ºã§ 00 ã 99 ã®åºå®é·ïŒ
$message = 123; // ã¡ãã»ãŒãžãæ°å€åãããã®ïŒæåã³ãŒããªã©ïŒ
$hash = $message % $max; // 123 ã 100 ã§å²ã£ãäœãïŒå¿
ã 0 ã 99 ã®ç¯å²ïŒ
printf("%02s", $hash); // 23 <-- äœãã 23 ã«ãªãçµã¿åããã¯ç¡éã«ãããã
// message ãèŠã€ããã«ã¯è¡ååŠçãªã¢ãããŒã
// ãå¿
èŠã«ãªã
ãããŠãåãæçŽãæã€ 2 人ã¯å¿ ã 1 ãã¢ä»¥äžããïŒ0 %ã§ã¯ãªãïŒããã«ãç°ãªãããŒã¿ãªã®ã«åãæçŽïŒããã·ã¥å€ïŒãæã€ããŒã¿ã¯å¿ ãäœããŸããïŒç°¡åãšã¯èšã£ãŠãªãïŒ
å ã®äŸã§èšããšãã¡ãã»ãŒãžãç°ãªã£ãŠãåãäœãã«ãªããããªã€ã¡ãŒãžã§ãã
$secret = 100;
$message = 123;
print_r($message % $secret); // 123 mod 100 = 23
$message = 323;
print_r($message % $secret); // 323 mod 100 = 23
ãã¡ãããå®éã«ã¯ããããªç°¡åãªåŒã¯äœ¿ãããŸããã
ãããããšãŠã€ããªã匱ããªããã颿°åããã°ç«æŽŸãªãããã·ã¥é¢æ°ãã§ãããã ãå®çšã«ã¯èããªããã¢ã«ãŽãªãºã ããšãããã·ã¥å€ã®é·ããã®ããªãã¡ãã£ãŠããã·ã¥é¢æ°ã§ããããšããã ãã§ãã
ã€ãŸããç°ãªãããŒã¿ãåããããŒã¿ã®æçŽããæã€ç¢ºçïŒèå¥ã®ç²ŸåºŠïŒããå éšã®ã¢ã«ãŽãªãºã ãããã·ã¥å€ã®é·ãã«äŸåããããã®ãè¬ã®ç®±ããããã·ã¥é¢æ°ã§ãã
ã§ã¯ãããã·ã¥é¢æ°ã®åºæ¬ããæ£ãããç¥ãããš Wikipedia ãéãããäœãèšã£ãŠããã®ãããããŸããã
- ããã·ã¥é¢æ° @ Wikipedia
ããã¯æ³åŸã鳿¥œçè«ãæ©æ¢°åŠç¿ãªã©ã®ããã¥ã¡ã³ããšåãããã«ããåããããã³ã«ã®äººïŒèšã£ãŠããããšãããã人ïŒåãã®ããã¥ã¡ã³ããã ããã§ãã
äŸãã°ãã倿°ãããé åããšèšãçšèªãããããªãã®ã«ãœãŒãã»ã¢ã«ãŽãªãºã ã®èª¬æãèŠãã«è¡ã£ãããã¡ã¢ãªã¢ãã¬ã¹ããã€ã³ã¿ãçè§£ã§ããŠããªãã®ã«é«éåããã¥ã¡ã³ããèªãã ãããããã XOR ãããããªãã®ã« TCP ã JPEG ã®ä»æ§æžãèŠããããªãã®ã§ãã
ãããã¯ããã¹ã¯ããããå³ã¯ãªãã¯ããŠããããã£ãéããŠãã ããããšèª¬æãããããæ¥æ¬èªã§ãkããšçžæããããã¬ãããšã¯ãªãã§ãããããåããããªãã®ã§ãã
ã€ãŸããããã·ã¥é¢æ°ãæ£ããç¥ãããšãããšããã°ã©ãã³ã°ã®åºç€ã ãã§ãªããæ°åŠãããæå·åŠãã®åºç€ç¥èãå¿ èŠãªã®ã§ãããããŠç«¯çã«äŒããããšãããšãããçšåºŠã®åºç€ç¥èãçžæã«æ±ããããšã«ãªããã®ãªã®ã§ãã
ãã®èšäºã¯ããŽãå¯èªã¿ã§ãããã®ã§ãäžéãèªãã§ãããå床 Wikipedia ã®èšäºãèªã¿çŽããŠã¿ãŠããšãïŒèªãã ... èªãããïŒããšãªãããšãæåŸ ããŠããŸãã
åŠåãããïŒæå·åŠã»æ°åŠãããïŒ
ããŠãæ°åŠãæå·åŠã®åºç€ç¥èãå¿ èŠããšã¯èšã£ããã®ã®ãæå·åŠã®äžçã¯èª¿ã¹ãã°èª¿ã¹ãã»ã©ãæå·åã»åŸ©å·ããšãã£ãäžéäžè¬ãæãããšãè¶ ããããŸããæå·ïŒã»ãã¥ãªãã£ããšå矩ãªãã ãªãšçæããŸãã
ãããŠïŒæ°åŠå«ãïŒåºç€ç¥èããªã人ããã®ãæ¬åœã«å®å šãªã®ããããªãå®å šãšèšããã®ã ããšèšã£ã質åã«ã¯ãæ°åŒã§èšŒæããŠèŠãããããããŸãããèšèã§èª¬æãããšãä»åºŠã¯èšèãç¬ãæ©ããããšãã£ãæ©æ¢°åŠç¿ã®ãšã³ãžãã¢ã®æ¹ãšè©±ããŠããæãšäŒŒããžã¬ã³ããå£éèŠãŸãã
èšèã®ç¬ãæ©ããšèšãã°ãæ©æ¢°åŠç¿ã®ãã£ãŒãã©ãŒãã³ã°ç³»ã®è©±é¡ã§ãç ç©¶è ãããªããããªãã®ãããããªãããšå ±éãããã®ãç®ã«ããããšããããšæããŸãããã®ãããäœã£ãŠãæ¬äººãã¡ããçè§£ã§ããªãè¬ã®æè¡ãçã«æãããã¡ã§ãã
ãããããããããªãããšããã®ã¯ãä»çµã¿ã¯ããã£ãŠããããããã¬ã€ãã¿ããšèšãããã倩æåŠçãªçµã¿åããã®ãã¿ãŒã³ãæ©æ¢°ã«ãããŠããããããªããã®çµã¿åããã«ãã©ãçããã®ããããããªãããšããç¥ãªã®ã§ããçè§£ããŠããªãããã§ã¯ãªãã®ã§ãã
çµã¿åããã®æããç¥ããªããšããæ¹ã¯ãããã«ã·ã®ãããããããçµã¿åããççºããå·¡åã»ãŒã«ã¹ãã³åé¡ããäžäœåé¡ãšäºéæ¯ãåããšèšã£ãããŒã¯ãŒãã§èª¿ã¹ãŠã¿ãŠãã ããã
ãããŠãã§ã¯ãä»çµã¿ãçŽ äººã«ããããããã«èª¬æãããäžè¡ã§ããã¿ãããªãä»çµã¿ïŒçè«ãçå±ïŒãçè§£ããæ°ããªããçµæã ããæ¬²ãããã£ãã¡ãããèšããã®ã ãããããªãããããããã©ããããããšããèªç¥ãšãAI ãšããèšèãäžäººæ©ãããŠãäžéãšã®çšèªã®ä¹é¢ã«æ©ãã§ããããã§ãã
ãAI ãã AI ããããšéšãã®ã¯ãæ©æ¢°åŠç¿ã®åŠè ãããããšãããªããç¥ãããã©ãæä»£ãããããšããã ãã§ä»ããã黿°ãã©ã³ãããžã¿ã«ã»ããŒãã¿ãããªãããæº¢ãããã£ãŠããããããã§ãã
ãŸãã確ãã«æä»£ã§ã¯ããã®ã§ãããã¶ã£ã¡ãã ð ããªããšããŸãšããªç ç©¶ãã¢ãã«äœæã¯ã§ããŸããããã®ããæµè¡ã£ãŠãããªããšäºç®ãåºãªããã説æããïŒæ£ããïŒãšããã§ãåããã®ã ãã§ãä»çµã¿ã«èå³ããªãçžæãã«èª€è§£ãè§£ãããã®æéãå²ãã®ãç¡é§ãšèšãã®ãçŸç¶ãããã§ãã
æã ããã°ã©ããŒã®äžçã§èšãã°ããããžã¿ã«åãã¯ã笊å·åã§ãã£ãŠãé»ååã®ããšã§ã¯ãªãããšæãã€ã€ããããžã¿ã«åïŒé»ååããšããäžéã®èªç¥ã«æµãããªããšãããªãæ¯çãã«äŒŒãŠããŸãããããã¯ãïŒããããããã¯ã¯ã©ãŠããšãã£ãã€ãïŒããšãã£ãæãã§ããããã
äžèš ãããžã¿ã«åãã¯ã笊å·åã§ãã£ãŠãé»ååã®ããšã§ã¯ãªãã ã«ã€ããŠãæãã®ã»ãã«ãã³ãšãã人ãå€ãã¿ããã§ãSNS ã§ããã©ã³ãžã¹ã¿ãé»åå¶åŸ¡ãªãã ããé»ååãšèšã£ãŠãééããããªãããšããæãã®ããã³ããæ°ä»¶ããã ããŸããã
è£è¶³ããŸãããããã§èšããããžã¿ã«åããšã¯ãã£ãžãããã€ãŸãæ°ããããããããŸã§æ å ±éãèœãšãããšãèšããŸãã
ã¢ããã°ã»ããŒã¿ã®å 容ãã0b1011ããšè¡šçŸã§ãããªããå²ç¢ã®ç³ããªã»ãã®ã³ãããââ¯ââããšäžŠã¹ãŠçœ®ããããã/-//ããšå£ã«å·ãã€ããŠãããã®æ°ïŒæ å ±ïŒã¯éäžè¶³ãªãçžæã«æ£ç¢ºã«äŒããæ®ãããšãã§ãããšããæå³ã§ããåæ§ã«ãæ³¢ã®å¹ ããåºãã»çãã»åºãã»åºãããšéä¿¡ããã°ãã¢ããã°ä¿¡å·ã§ãã£ãŠãããžã¿ã«æ å ±ãäŒããããŸãïŒããããå°ããžïŒã
ã¢ããã°ããåãã ãšãããšãããžã¿ã«ã¯ãéæ®µãã®ãããªãã®ã§ãããªããšãå±±ã®äžéã§åŸ ã£ãŠããããããªããšãå±±ã®â段ç®ã§åŸ ã£ãŠããã®æ¹ãæ£ç¢ºã«äŒããã€ã¡ãŒãžã§ããããã
ã€ãŸããå¿ ããã黿°ãããã¯é»åæ©åšã§ãªããšããžã¿ã«åã§ããªããšããããã§ã¯ãªãã®ã§ãããããã䜿ã£ãæ¹ããäœããšæ¥œã ããéããšããã ããªã®ã§ãã
ãŸãããæ°ããããããšããç¹ã§ãããžã¿ã«åãããéååããšãèšã£ããããŸããã¢ããã°ïŒç¡éã«é£ç¶ããïŒããŒã¿ã®æž¬å®å€ãäžžãããã®ãéååãšèšãã笊å·åãããã®ãããããªã®ã§ãããããã·ã¥é¢æ°ã«ããã説æã«ãããŠã¯ãéååããšããèšèã䜿ãã®ã¯å¥œãã§ã¯ãããŸãããåŸè¿°ããŸãããããçš®ã®ããã·ã¥é¢æ°ïŒç¹ã«æå·ããã¿ïŒã§ã¯å€©æµãšãèšããéåã³ã³ãã¥ãŒã¿ãŒã®è©±ã§ããããããã«ãªãããã§ããåããéåãã§ããããäœééåããããéããããã®ã«ãåæã«çŽã¥ãã人ãå€ãããã§ãã
ãã®èšäºã§ã¯ãäŸãã°ç»åãã¹ãã£ã³ããã ãã®ãã®ã¯ãé»ååããç»åããããŒã¿ãæãåºãè§£éã§ãããã®ïŒäŸãã° OCR ããŒã¿ïŒããããžã¿ã«åããšåŒã³ãŸããããã¯åŸè¿°ãããé»å眲åããšãããžã¿ã«çœ²åãã®éãã§éèŠã ããã§ãã
ããŠãæå·åŠã®äžçãæã ã®ãããªãã³ããŒãè§£éããå 容ã埮åŠã«ééã£ããŸãŸåºãŸã£ãŠãããããåããã®ã ãã§ä»çµã¿ã«ã¯èå³ããªãçžæã«ãåºç€ããæãããééããæ£ãæéãå²ãã®ãç¡é§ãšæããããã§ãã
åããã«ãããŠãçè ãæ°åŠãæå·åŠã«åŒ·ãããã§ã¯ãããŸããã
ãããããšã³ãžãã¢ãšèšãããã¯ç¿äººã«è¿ãã®ã§ã1 ã€ã®å ¬åŒãã 500 æåã®ãœãŒã¹ã³ãŒããèŠããŠããã£ãæ¹ãçè§£ã§ããã®ã§ãã
ããã§ãbash ãªã©ãè§Šã£ãããèªåã§äœãããã®ããã°ã©ã èšèªã§ä¿ºæ§é¢æ°ãäœã£ãããšãããã°ãããããã°ã©ããŒçãªè¡šçŸæ¹æ³ã§ãç¥ã£ãŠãããæ¹ãè¯ãããã·ã¥ã®åºç€ç¥èãã説æããããšæããŸãã
ãªãããã®èšäºã«ã¯ãµã³ãã«ã»ããã°ã©ã ã¯ãããã®ã®ãèšç®åŒãã¢ã«ãŽãªãºã ã®è©³çްã¯ãããŸããããŸããã»ãã¥ãªãã£ãŒã®èšäºã§ããããŸããããããæå·åŠãã»ãã¥ãªãã£ãŒä»¥åã®åºç€ç¥èã¬ãã«ã§ãããå²ãç®ã®äœãããã倿°ããçè§£ã§ããŠããã°ååã§ãã
ãããŸã§ãçè ãèãããå®åäœãããã®ãéããŠçè§£ãããããã·ã¥é¢æ°ã®åºç€æŠè«ãçãªãã®ã§ãããã®ãããäžå¯§ã«èª¬æããŠããã€ããã§ããããããããã©ãéšåããããŸãã
ãžã£ã³ã¯ããŒãçãªèšäºã§ãããèªåãªãã«ãããã·ã¥é¢æ°ã奜ãã«ãªã話é¡ãå®äŸããããŠããçãã«ããŠããŸãã®ã§ããŽãå¯ã§ãããªããã¹ããã§ãèªã¿ãã ããã
ãã®èšäºã§ã¯ãããŸããŸãªçšèªãšããã®æŠèŠã説æããŠããŸãããããŠããããã®çšèªãã€ãªãã£ãŠïŒç¹ãšç¹ãç·ã«ãªã£ãŠïŒè¡ãããŸã楜ããã§ããã ããã°ãšæããŸãã
ãŸããèå³ã®ããããŒã¯ãŒããåºãŠæ¥ããèªåãªãã«æãäžããŠãããæ£ç¢ºãªãã®ã«å ãäžããŠæ¬²ãããšæããŸããããŒã¯ãŒãã®æŠèŠãçè§£ããäžã§åçš®æç®ãã芧ã«ãªããšãããç解床ãé«ãŸã£ãããããªèšäºã«ãªããšãããªãšæããŸãã
ãããŠééããèŠã€ããããæ»ã£ãŠããŠããã£ããã³ã¡ã³ãæ¬ã«æžããŠããã ãããšå¬ããã§ãã
ãŸãããã®èšäºã¯ãâ€ïžïŒæ§ LGTMïŒããä»ããã³ããã®ææã§åŸãŠããç¥èãééããæŽçããã€ããã§æŽæ°ã»ä¿®æ£ããŠããŸããæžãåºããªããšçè§£ã§ããªããµã¬ãªã®ã§ã1 ã€ã®æ å ±ãšããŠæ°è»œã«ãèªã¿ãã ããã
ãããã·ã¥ãã®æå³ãšãããã·ã¥é¢æ°ãã®å®çŸ©
ããŠãããã·ã¥é¢æ°ã®èª¬æã®åã«ãããã·ã¥ãã®æå³ãšããã®èšäºã«ããããããã·ã¥é¢æ°ãã®å®çŸ©ãããªããšãããŸããã
ãšããã®ããåŸè¿°ããŸããäžè¬çã«ãããã·ã¥é¢æ°ããšããèšèã¯ãæå·åŠçããã·ã¥é¢æ°ããæã«æããŠããããšãå€ãããã§ãã
ãã®ãããããã·ã¥é¢æ°ã®ã¢ã«ãŽãªãºã ãšã㊠CRC ãå«ããã®ã¯éãããžã£ãã€ã«ðããšèšãæ¹ããããšæããŸãã
éãã
確ãã«ãCRC ã¯ãã§ãã¯ã»ãµã ã®èŠªæã¿ãããªãã®ã ããæ£ããã¯ããžã£ã¡ã€ã«ðãã§ãã
ããããããã«åºå·ãããããšã»ãã¥ãªãã£ã«ã°ããç®ãè¡ã£ãŠããŸãããããã·ã¥ãã®çšèªã®çè§£ã ãã§ãªãããããã·ã¥é¢æ°ãã®å©ç𿹿³ãçããŠããŸããŸãã
ç¹ã«ããããŒã¿ã®é¡äŒŒæ§ããããã·ã¥å€ã«ãããç¥èŠããã·ã¥ãïŒPerceptual HashïŒã®çè§£ã®åŠšãããæ©æ¢°åŠç¿ã«ãããŠãããã·ã¥åããŠããŒã¯ã³ãäœæããããšèšãããæ©æ¢°åŠç¿ã«æå·ã䜿ãããŠããããšãã£ã誀解ã«ãç¹ãããããŸããã
ãããã·ã¥ããšã¯äœã
myArray["foo"] = "bar"; ãªã©ã®é£æ³é
åã®ãããã·ã¥ã»ããŒãã«ãããJSON ãªããžã§ã¯ããªã©ã®ãããã·ã¥ãïŒæ·»åé
åïŒãšèããŠããïŒããã·ã¥ã£ãŠäœã ããïŒããšèª¿ã¹ããããããæå·ãæ°åŠã®è©±ããåºãŠããŠããã£éããããæ¹ãå€ããšæããŸãã
ããã§ã¯ãããã·ã¥ããšã¯äœã§ãããã
ããã·ã¥é¢æ°ã®ãããã·ã¥ãã¯ãhashããšæžããåçŽã«æ¥æ¬èªã«èš³ããšãããæ··ããã现åãããå°ç¡ãã«ããããªã©ã®æå³ããããŸãã
ãããããã®èªæºã蟿ããšé¢çœãã«ãŒããããããŸãã
çŸè¡ã®å€å
žææ³ã§ãhatchããšããå¹³è¡ç·ã§æç»ããææ³ãããããã©ã³ã¹èªã®ãhachðãããæ¥ãŠããŸããæ¥æ¬ã®æŒ«ç»ãªã©ã§ããã³ç»ã®åºæ¬ãšãªã£ãŠããææ³ã§ããã
![]() |
|---|
| ãããã³ã°ææ³ã®äŸïŒWikipedia ããããã³ã°ãããïŒ |
ããããè±åœè±èªã§ã¯å¹³è¡ç·ã§æ§æããããäºã®åãããäºã®åãã®ãããªç¶æ
ã®ãã®ã hatch ããã㯠hash ãšåŒã¶ããã«ãªããŸãããæœæ°ŽèŠãå®å®è¹ã®ãããããéããããªã©ã®ãããããäºã®ååã®åºå
¥ãå£ãã§ãã£ãããšããæ¥ãŠããŸãã
ä»ã«ããèããžã£ã¬ã€ã¢ãªã©ãã瞊暪ã«äºã®åã«ããããŠããã现åãã«ãªã£ããã®ããhashed ãïŒããã·ã¥ããªããšãïŒããšåŒã¶ã®ãåæ§ã®èªæºã§ãã
ãããŠè±åœã§ã¯é»è©±ã®ãïŒãããŒããããã·ã¥ã»ããŒããšåŒã¶ããã«ãªããŸããããããçŸåšã®ãããã·ã¥ã»ã¿ã°ãïŒããã·ã¥èšå· ïŒ ã«ããã¿ã°ä»ãïŒã®èªæºã§ãã
ã¡ãªã¿ã«ã"#" ã®èšå·èªäœã¯ã©ãã³èªã® "libra"ïŒå¹³çããã©ã³ã¹ã象城ãã倩秀ã転ããŠãéããïŒã®ç¥åã厩ãããã®ã§ãã
ããŒãã®å人ãªã©ããlibra pondoïŒãéãã®éãïŒãææžãããéã« "lb" ã«æšªç·ãå
¥ããŠç¥ãã "â" ã厩ãããã®ã "#" ã§ããã®ã¡ã«ãããéãæ°ã瀺ãèšå·ãšãªããŸãã
"#" ãç±³åœè±èªã§ã¯ãã³ãïŒpoundïŒãšåŒãã ãããã³ãã®ç¥ã "lb" ã â£âïŒlibra ã® LïŒã ã£ããããã®ã libra ãã«ãŒãã§ãã
èšèªåŠçã«ã¯ãå¹³çãïŒlibraïŒãšãèªç±ãïŒliberïŒã¯é¢ä¿ããªãã®ã§ãããã©ãã³èªåã§ã¯ãç¬è£æ¿æ²»ã»å°å»ºå¶ã»å¥Žé·å¶ãªã©ããã®è§£æŸãç³»ã§ãããã»ããã§äœ¿ãããããããäžå¹³çããã®è§£æŸãšèªå·±è²¬ä»» = èªç«ããšããäžå¹³çããã®è§£æŸã "libre" ãªããšãïŒèªç±ãªããªããšãïŒãšå¥œãã§è¡šçŸãããŸãã
Libre Office ãªã©ã® libre ããç¡æãšããæå³ã§ã¯ãªããèªç±ïŒäžå¹³çããã®è§£æŸãšèªå·±è²¬ä»»ïŒã§ããããšèšããããããã§ããããŸãã
ããã·ã¥ã»ã¿ã°ïŒ"#"ïŒã®èšå·ã«ãããããªæ·±ãæå³ããã£ããã§ãããç¥ãããã©
ããŠãé話äŒé¡ã
転ã㊠ããŒã¿ãã³ãåãã«ããŠãããåäœã§ã¯å šäœãããããªããã®ãã³ã³ãã¥ãŒã¿ã®äžçã§ã¯ãããã·ã¥ããšåŒã³ãŸãã
å ã«ããããã·ã¥åããŠããŒã¯ã³ãäœæããããšããæ©æ¢°åŠç¿ã®è¡šçŸãããããšã«è§ŠããŸãããå ·äœçã«ã¯ãããŒã¿ïŒäŸãã°ããã¹ãæïŒãã³ãåãã«ããŠãåã ãããŒã¯ã³ãšåŒã³ãããŒã¯ã³ã«ã¯ ID ãæ¯ãããŸãïŒããŒã¯ã³ãšã¯ãããã§ããå©çšã§ããªãçºè¡ç©ãæããããã§ã¯ããã®ããŒã¿ã§ããæå³ããªããªã ID ã§ãïŒã
ãã®ã³ãåãã«ããããšãæ©æ¢°åŠç¿ã§ããã·ã¥åãšèšããŸãã
| å ããŒã¿ | This is a data to be hashed and tokenized. |
|---|---|
| ããŒã¯ã³ãš ID ïŒ6æåããšã«ããã·ã¥ïŒ |
This i, s a da, ta to , be has, hed an, d toke, nized.
|
ä»ã«ããJavascript ãªã©ã® Hash map ããRedis ãªã©ã® hash ãšãã£ããã©ãã¿ãŠã飿³é åã JSON ã®ãªããžã§ã¯ãã«ããèŠããªããã®ããããã·ã¥ããšåŒãã§ããã®ããããŒã¿å šäœã现ååãããã®ã ããã§ãã
| ID | Name | Age |
|---|---|---|
| 001 | Alice | 32 |
| 002 | Bob | 33 |
| 003 | Charlie | 16 |
äžèšããŒã¿ã® Redis ã«ãããããã·ã¥ïŒ1 ä»¶ã®ããŒã¿ãè¡ã®ããšïŒã
| Key | Value |
|---|---|
| ID | 001 |
| Name | Alice |
| Age | 32 |
ãããããã®çšåºŠã®çްååã§ã¯åã ã®ããŒã¿ãå¯ãéããã°å ã®åœ¢ã«æ»ã£ãŠããŸããŸããè§åãã¹ããŒãã®ãããªã€ã¡ãŒãžã§ãããã³ããŒã°ã®ãã³ãèã®ããã«ã埩å ãã§ããªãã¬ãã«ãŸã§åå²ããŠéœåã®ãããµã€ãºã§äœ¿ãããå Žåã«äœ¿ãããã®ããããã·ã¥é¢æ°ãã§ãã
ããŸãšãã
ã³ã³ãã¥ãŒã¿ãŒæ¥çã«ããããããã·ã¥åããšã¯ãæ
å ±ãåŠçããããããã«æçåããããšãæçåãããæ
å ±ïŒããã·ã¥å€ïŒåäœã§ã¯å
šäœãèŠããªãã®ãç¹åŸŽã
ð  ã¡ãªã¿ã«ããã³ãèããªã©ã®ããã³ããã¯ãã©ãã³èªã®ãå°ãããã®æã§ãããminutiaããããã©ã³ã¹ã§ãmincierãã«ãªããè±åœã®ãminceãã«ãªã£ããã®ã§ãããåãã® minute ããå°ãããã® mini ããã³ãèãšåãèªæºãªã®ãé¢çœãã§ããã
ãããã·ã¥é¢æ°ãã®å®çŸ©
ããŒã¿ãã³ãåãã«ãããªã©ããããåäœã§ã¯å šäœãããããªãããŒã¿ã«ããããšãããã·ã¥ãšåŒã¶ãããšã¯ããããŸããã
ãããŠãããã·ã¥ã»ããããªã©ã¯å¯ãéããã°å šäœãèŠããŠããŸãã®ã§ãããããå ã®åœ¢ã«åŸ©å ãã§ããªãã¬ãã«ãŸã§çްååïŒãã³ãç¶æ ã«ïŒããŠãéœåã®ãããµã€ãºã«ãããæã«äœ¿ãã®ãããã·ã¥é¢æ°ãšããããšãããããŸããã
以äžãèžãŸããŠããã®èšäºã«ããããããã·ã¥é¢æ°ãã®çšèªã®å®çŸ©ãããããšæããŸãã
A hash function is any function that can be used to map data of arbitrary size to fixed-size values.
ïŒHash Function @ Wikipedia ããïŒ
ãçè èš³ã
ããã·ã¥é¢æ°ãšã¯ãä»»æã®ãµã€ãºã®ããŒã¿ãåºå®ãµã€ãºã®å€ã«ãããã³ã°ããããã«äœ¿çšã§ãã颿°å šè¬ã®ããšãèšããŸãã
ã€ãŸããã©ã®ãããªå éšåŠçã®èãæ¹ã®é¢æ°ã§ãã£ãŠãããã®é¢æ°ãéããšåºå®é·ã®ããŒã¿ã§è¿ã£ãŠãã颿°ããããã®èšäºã§ã¯ããã·ã¥é¢æ°ãšåŒã³ãŸããåºçŸ©ïŒåºãæå³ïŒã§ã®ããã·ã¥é¢æ°ã§ããã
ãããã·ã¥é¢æ°ããšã¯äœã
äœã¯ãšãããããã·ã¥é¢æ°ã¯ãä»»æã®ããŒã¿ãæž¡ããšãããã·ã¥å€ããšåŒã°ããå€ãè¿ã£ãŠãã颿°ã®ããšãã§ãã
... ... ... ãŸããããã§ãããã
ã§ãããã ã®é¢æ°ã§ããããšããèªèã¯æå€ã«éèŠãªã®ã§ãã
æ©æ¢°åŠç¿ãªã©ã§ããã¥ãŒã©ã«ã»ãããã¯ãŒã¯ããšãèŠèãããéããâããããããã®ç·ã§ã€ãªãã£ãŠããå³ãèŠãŠãæããšæããæ¹ããããšæããŸãã
å®ã¯ããã®ãâãã£ãŠé¢æ°ãã¡ãœããïŒã¯ã©ã¹é¢æ°ïŒã®ããšãªãã§ãã
ãããŠé¢æ°ã®åºåããå¥ã®é¢æ°ã®åŒæ°ã«ãé åã§æž¡ããŠãããã®ããç·ããªãã§ãã
ããããâãã®é¢æ°ã¯ãåŒæ°ã«éã¿ãä»ããŠè¶³ãç®ããŠãã£ã«ã¿ãŒã«ãããã ãããšãã£ããå现èããã£ïŒããšèšããããªããããªåçŽãªåŠçãããã ãã ã£ããããŸãã
ããèããªããèŠããšåçŽã§ãïŒç°¡åãšã¯èšã£ãŠãªãïŒã
ãããã·ã¥é¢æ°ããããªãã ããã èšã£ãŠãçµå±ã®ãšããããã ã®é¢æ°ããªã®ã§ãã
ãåœæ°ãã€ãŸããåŒæ°ãåããªãæåŸ ããå€ãåºãŠããè¬ã®åœãã§ãããããŠãããã·ã¥å€ãªãè¬ã®å€ããæ»ãå€ã§ãããšèšãã ãã§ããïŒãããã·ã¥å€ãã«ã€ããŠã¯åŸè¿°ããŸãïŒ
ã»ãšãã©ã®ããã°ã©ã èšèªã§ãããã·ã¥é¢æ°ãã¯å®è£ ãããŠããŸããã䜿çšã§ããã¢ã«ãŽãªãºã ã¯ç°å¢ã«ãã£ãŠç°ãªããŸããæšæºã©ã€ãã©ãªïŒæåãã忢±ãããŠããã¢ãžã¥ãŒã«ãªã©ïŒã«å«ãŸããŠãããã«äŸåããããã§ãã
ãããã·ã¥å€ããšã¯äœã
ããŠãããã·ã¥é¢æ°ã®æ»ãå€ã§ãããããã·ã¥å€ãšã¯äœããã®åã«ã以äžã® "beef" ããã³ "beef1" ãšããæååãããã·ã¥å€ã«ããäŸãã芧ãã ããïŒäžèŠãã©ã³ãã 颿°ã®ããã«ãæããŸããéãã¯åŸè¿°ããŸãïŒã
æ¬èšäºã§äœ¿çšããèšèªã¯ãbash ãš PHP ã§ããã³ãã³ãã 1 è¡ã§ãããŸããšèšãã ãã§éžã³ãŸãããã©ã¡ãã®èšèªãç¥ããªããŠãããã£ãŠããããšã¯åããªã®ã§æ°æ¥œã«æ§ããŠãã ãããæååã颿°ã«æž¡ããŠåºåããŠããã ãã§ããããã°ã©ã ã®ææ³ãªã©ã¯æ·±ãèããã«ãåçŽã«äœãããŠããããã«æ°ä»ãã°ååã§ãã
bash 㯠openssl ã³ãã³ããPHP ã§ã¯ hash() 颿°ã䜿ã£ãŠããã·ã¥åããŠããŸãããŸããå©çšããã¢ã«ãŽãªãºã 㯠md5 ãš sha512 ã§ãã
ãã€ã³ãã¯ãbash php ã«éãããã©ã®ããã°ã©ã èšèªã䜿ã£ãŠã以äžã® 3 ã€ã¯åãããšã«æ³šç®ã§ãã
- æ°å€ïŒ16 鲿°ïŒã®æååã§è¿ã£ãŠããã
- ã¢ã«ãŽãªãºã ãšåŒæ°ãåãå Žåã¯çµæãå€ãããªãã
- å¡©ã 1 è¶³ãã ãã§çµæã倧ããå€ããã
ããã·ã¥ãã»ããŒãã®äŸ
$ # ç²æœãçãã³ã
$ echo -n 'beef' | openssl md5
34902903de8d4fee8e6afe868982f0dd
$ # ç²æœãçãã³ã
$ echo -n 'beef' | openssl md5
34902903de8d4fee8e6afe868982f0dd
$ # ç²æœãçãã³ãïŒBashïŒ
$ echo -n 'beef' | openssl md5
34902903de8d4fee8e6afe868982f0dd
$ # ç²æœãçãã³ãïŒPHPïŒ
$ php --run 'echo hash("md5", "beef");'
34902903de8d4fee8e6afe868982f0dd
$ # ããã·ã¥ãã»ããã
$ echo -n 'poteto' | openssl md5
147f31c730caa77f8a3440e549264a2e
$ # è§åãããã
$ echo -n 'tomato' | openssl md5
006f87892f47ef9aa60fa5ed01a440fb
$ # ç²æœãçãã³ã ïŒ 1g ã®å¡©å
¥ãïŒbeef1ïŒ
$ salt=1; echo -n 'beef'$salt | openssl md5
30017279d6a5bac241e764eeed261dd8
$ # ç²æœãçãã³ã ïŒ 1g ã®å¡©å
¥ãïŒã³ãã¯ãéã£ãŠãåãã¬ã·ããªãåãå³ïŒ
$ php -r '$salt=1; echo hash("md5", "beef" . $salt);'
30017279d6a5bac241e764eeed261dd8
$ # çµ¹ããçãã³ã
$ echo -n 'beef' | openssl sha512
8cd8bb0cef938ef9cd054c2c2cb965e83310ab5c197cb5fc8f35892a44c1a028bac9e1bcd6248580fa2739cc96074885ea3ee116ef35c2d8f6124270aeff50b7
$ # çµ¹ããçãã³ãïŒã³ãã³ãã®èšèªãéã£ãŠãåãã¢ã«ãŽãªãºã ãšåŒæ°ãªãåããã³ãèïŒ
$ php -r 'echo hash("sha512", "beef");'
8cd8bb0cef938ef9cd054c2c2cb965e83310ab5c197cb5fc8f35892a44c1a028bac9e1bcd6248580fa2739cc96074885ea3ee116ef35c2d8f6124270aeff50b7
$ # çµ¹ããçãã³ã ïŒ 1g ã®å¡©å
¥ã
$ salt=1; echo -n 'beef'$salt | openssl sha512
a528829f370819123ad3fb04d8066b77ec79ce6eddad07e5b2c925bbd9b2e699e73428d23315875c29b45500b8c767262cf5546e33974e4f7a6102abd1bb045e
$ # çµ¹ããçãã³ã ïŒ 1g ã®å¡©å
¥ãïŒã³ãã¯ãéã£ãŠãåãã¬ã·ããªãåãå³ïŒ
$ php -r '$salt=1; echo hash("sha512", "beef" . $salt);'
a528829f370819123ad3fb04d8066b77ec79ce6eddad07e5b2c925bbd9b2e699e73428d23315875c29b45500b8c767262cf5546e33974e4f7a6102abd1bb045e
- ãªã³ã©ã€ã³ã§åäœãã¿ã (PHP, Bash, Go, Python3) @ paiza.IO
Windows ã® PowerShell ã§ã詊ããŠã¿ã
Windows 11 ã®æšæºã³ãã³ãã§ããã·ã¥å€ã確èªããã«ã¯ certutil ãš Get-FileHash ã³ãã³ãããããŸãã
certutil ã¯å€æ©èœã§ããïŒèšŒææžã®ç¡å¹åæäœãšãã£ãã¯ãªãã£ã«ã«ãªæ©èœãå«ãïŒãããåçŽã«ãã¡ã€ã«ã®ããã·ã¥å€ã確èªããã ããªã Get-FileHash ã䜿ãããšãæšå¥šãããŠããŸãã
Get-FileHash [ãªãã·ã§ã³] <ãã¡ã€ã«ã®ãã¹>
# 䜿çšäŸ
Get-FileHash -Algorithm SHA512 foo.pdf
åé¡ã¯ Get-FileHash ã¯ããã¡ã€ã«ãã®ããã·ã¥å€ã«ç¹åããŠããããšã§ãããã®ããããæååãã®ããã·ã¥å€ãç¥ãããå Žåã¯çŽæ¥äœ¿ããªãã®ã§ã工倫ãå¿
èŠã«ãªããŸãã
PS C:\Users\KEINOS\OneDrive\Desktop> # æ¹è¡ãªãã§ "beef" ã®ããã¹ããäœæ
PS C:\Users\KEINOS\OneDrive\Desktop> "beef" | Out-File beef.txt
PS C:\Users\KEINOS\OneDrive\Desktop> Get-FileHash -Algorithm MD5 ./beef.txt
Algorithm Hash Path
--------- ---- ----
MD5 34902903DE8D4FEE8E6AFE868982F0DD C:\Users\KEINOS\OneDrive\Desktop
ã¹ã¯ãªããå ã§æååãããã·ã¥åãããå Žåã¯ãäžæŠã¹ããªãŒã ã«æååãæžã蟌ã¿ãã¹ããªãŒã çµç±ã§èªã¿èŸŒãŸããå¿ èŠããããŸãã
PS C:\Users\KEINOS\OneDrive\Desktop> # ã¹ã¯ãªããã®äžèº«
PS C:\Users\KEINOS\OneDrive\Desktop> get-content ./beef.ps1
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("beef")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream -Algorithm MD5 | Select-Object Hash
PS C:\Users\KEINOS\OneDrive\Desktop>ã# ã¹ã¯ãªããã®å®è¡
PS C:\Users\KEINOS\OneDrive\Desktop> . ./beef.ps1
Hash
----
34902903DE8D4FEE8E6AFE868982F0DD
- åèæç®ïŒãäŸ 4: æååã®ããã·ã¥ãèšç®ããã | Get-FileHash | ãªãã¡ã¬ã³ã¹ | PowerShell @ learn.microsoft.com
PS C:\Users\KEINOS\OneDrive\Desktop> $PSVersion::PSVersion
Major Minor Patch PreReleaseLavel BuildLabel
----- ----- ----- --------------- ----------
7 4 1
ããŠãäžèšãèŠããš beef ã®ååã¯ãããŸããããããã·ã¥å€ã®å¯Ÿå¿è¡šãããã°ãå
㯠beef ããã㯠beef1 ã§ããããšã¯ç¢ºèªã§ãããã§ãã
ããã·ã¥ãããŠã®ããŒãã¯ãããºã«ããèŠããŸããããæå衚ïŒïŒïŒäžã¯åãã§ããååãçããŠããªãç¶æ ãæ°å€ã®æååã«ããå€ããããã·ã¥å€ã§ãã
éå¯éãªæãã¯ããèŠæ°Žçã«è¿ãããã§ããæ°Žã§ãããããšã¯ããããããªã€ã¡ãŒãžã§ããããã
ãšã¯èšããããã·ã¥å€ã¯ãå€ããšããããã«æ°å€ã§ãããããã10 鲿°ã®å€ã®ãŸãŸã ãšäººéïŒãšã³ãžãã¢ïŒãæ±ãã¥ããã®ã§çããããããäžè¬çã« 16 鲿°ã®ãæ°å€ã®æååãã§è¿ããŠããŸããããã·ã¥é¢æ°ã®ãªãã·ã§ã³ã«ãã£ãŠã¯æåååã§ãªãããã€ããªïŒãã€ãããŒã¿åïŒã®ãŸãŸååŸã§ãããã®ããããŸããããããã«ããŠããæ°å€ãšããŠèªèã§ããå€ãã§è¿ã£ãŠããŸãã
ãããŠãã©ã®ããã«ãã³ãïŒããã·ã¥ïŒã«ãããããã¢ã«ãŽãªãºã ãã«ãªããŸãã
ã«ãŒããã·ã£ããã«ãããã®ããã«äœåºŠã XOR ãããç©ãããã°ãããŒã¿ã 1 ãã€ããã€èªã¿èŸŒã¿ãªãããŽãã§ãŽãã§ããããšãã©ã®ã¢ã«ãŽãªãºã ã䜿çšç®çãææ³ã«ãã£ãŠèšèšãç°ãªããŸãã
æå·åŠçããã·ã¥é¢æ°ãšãã§ãã¯ãµã çããã·ã¥é¢æ°
ããã·ã¥é¢æ°ã®æ»ãå€ã§ãããããã·ã¥å€ããçæããã«ã¯ãæ¬èšäºã®äžèЧã§ç޹ä»ããŠããããã«ãè²ã ãªã¢ã«ãŽãªãºã ããããŸãã
åã
ç°ãªã£ãææ³ãç®çã§èšèšãããŠããŸããããããã®ã¢ã«ãŽãªãºã ã§ããåŒæ°ãåãã§ããã°æ»ãå€ãåãããã©ããªé·ãã®ããŒã¿ã§ãåºå®é·ã®ããŒã¿ã«ãã颿°ããšããç¹ã¯å€ãããŸããïŒäŸãæŒç®çµæã 1 ãšçããŠããæå€§å€ã¯æ±ºãŸã£ãŠãããããããã£ã³ã°ããšèšã£ãŠãé ããŒãã§åããŠåºå®é·ã«ããŸããããã«èŒªãæããŠãSHA-3 ã® SHAKE256 ã®ããã«ä»»æã®é·ãã§ååŸã§ããã¢ã«ãŽãªãºã ãã€ãŸãå¯å€é·ã®ã¢ã«ãŽãªãºã ããããŸãããåŒæ°ãåãã§ããã°åãå€ãè¿ã£ãŠããŸãïŒã
ãããã·ã¥é¢æ°ãã®çš®é¡
ããã·ã¥é¢æ°ã«ã¯å€§ãã 2 ã€ã®çš®é¡ããããŸãã
æå·åŠçããã·ã¥é¢æ°ãšããã以å€ã§ãã
ããã·ã¥é¢æ°ã«ãã£ãŠã¯ãæå·åã«ã䜿ãããŠããèãæ¹ãå©çšãããã®ããããŸããããããæå·åŠçããã·ã¥é¢æ°ããšåŒã³ãŸããæããã«èšããšãã»ãã¥ãªãã£ãŒç®çã§äœ¿ãããããã·ã¥é¢æ°ã®ããšãã§ãã
å è¿°ããŸããããããã·ã¥é¢æ°ã«ã¯ä»¥äžã® 2 ã€ã®ç¹åŸŽããããŸãã
- åãçµæã«ãªã
- ã¢ã«ãŽãªãºã ãšåŒæ°ãåãå Žåã¯ãåãããã·ã¥å€ãè¿ã£ãŠããã
- åãé·ãã®å€ã«ãªã
- ããã·ã¥å€ã¯åºå®é·ã®æ°å€ã§è¿ã£ãŠããïŒäžè¬çã« n æ¡ã® HEX æååïŒâ»1
ãããŠãæå·åŠçããã·ã¥é¢æ°ãã®å Žåã¯ãããã«èŒªããããŠããã«å€§ã㪠3 ã€ã®ç¹åŸŽãå ãããŸãã
- åãããã·ã¥å€ã«ãªããªã
- ç°ãªãåŒæ°ããåãããã·ã¥å€ã«ããã®ã¯éããªãé£ããã
- éç®ãã§ããªã
- ããã·ã¥å€ããå ã®å€ïŒåŒæ°ã®å€ïŒã¯èšç®åŒã«ããç®åºãã§ããªããâ»2
- äºæž¬ãå°é£ã§ãã
- å ¥åã®èŠåæ§ã«å¯ŸããŠåºåã«èŠåæ§ããã£ãŠã¯ãªãããããã·ã¥å€ããå ã®å€ã®äºæž¬ã¯é£ãããâ»2
- â»1ïŒ æ¬èšäºæªæ²èŒã§ãã
SHAKE256ãªã©ã®äžéšã®ã¢ã«ãŽãªãºã ã§ã¯ãä»»æã®é·ãã®æ»ãå€ãåŸããããå¯å€é·ã§è¿ããã®ããããŸããããããåŒæ°ãåãå Žåã¯ãæ»ãå€ãåãããšèšãç¹ã§ãåãåŒæ°ã§ããã°æ¯ååãå€ãã€ãŸãåãé·ãã§è¿ã£ãŠããã®ã¯å€ãããŸãããã¡ãªã¿ã«SHAKE256ã®256ã¯åºåã®ãããé·ã§ã¯ãªããå éšã§äœ¿ããã匷床ã§ãã - â»2ïŒ ç¡éã«ãŒãïŒç·åœããæ»æïŒã«ããç®åºãèŸæžæ»æã«ããäºæž¬ã®å Žåé€ããéã«èšãã°ãæå·åŠçããã·ã¥ãå©çšããªããã¢ã«ãŽãªãºã ã¯ãæå·åŠçããã·ã¥ãšæ¯ã¹ãããäºæž¬ã»è¡çªå¯èœã«ãªããŸããè¡çªãæå·åŠçããã·ã¥ã«é¢ããŠã¯åŸè¿°ããŸãã
ç°ãªãå€ãªã®ã«ãããã·ã¥åãããšåãå€ã«ãªãããšããè¡çªãïŒã³ãªãžã§ã³ïŒãšèšããŸãã
ããããåãè¡çªã§ããããããã·ã¥å€ãšåãããã·ã¥å€ã«ãªãå€ãæ¢ããã®ãšãåãããã·ã¥å€ã«ãªãç°ãªã 2 ã€ã®å€ãæ¢ããã®ã§ã¯çš®é¡ãéããŸãã
ãèªåãšåãæçŽã®äººãæ¢ããã®ãšãåãæçŽãæã€ 2 äººãæ¢ããã®ã§ã¯ç¢ºèªããæ°ãéãã®ãšåãã§ããç ç©¶ããäžã§ããããã®éãã¯éèŠãªãããå°éå®¶å士ãè¿ éã«çéã§ããããã«åã ã«å°éçšèªãä»ããŠããã®ã§ Wikipedia ãå°éèšäºãèªãã§ãé£ããæããã®ã§ãã
æå·åŠçããã·ã¥é¢æ°ã«ã€ããŠãã»ãã¥ãªãã£ïŒæå·åŠïŒå°éã®æ¹ã®èª¬æãèããŠãããããããã§ããããªã説æã«æããŸããã... ... çŸåŠããšèª¬æããããããªå°é£ããã§ãã
ããªãå°é£ããèšãæ¹ãããã®ã ããããšæããåå¿é²ãšããŠããã®èšäºãæžãå§ããããã§ãããåçŽã«ãïŒãã®æ¥çã®ïŒå匷äžè¶³ããšããèªåœåã®ãªããªã®ã§ããããšã»ã»ã
ããŸãšãã
ãŠãŒã¶ãŒç®ç·ã ãšãæå·åŠçããã·ã¥é¢æ°ãã¯ãããŒã¿ã®æ¹ç«æ€ç¥ã«åŒ·ããããŒã¿ã®åäžæ§ããéèŠãããããã·ã¥é¢æ°ã§ããã®ãç¹åŸŽã§ãã
ã€ãŸããç°ãªãããŒã¿ãåãããã·ã¥å€ã«ãªãã¥ããã¢ã«ãŽãªãºã ãšèšããŸããæå·åŠçããã·ã¥é¢æ°ä»¥å€ã®ããã·ã¥é¢æ°ã«é¢ããŠã¯åŸè¿°ããŸãã
ã©ã³ãã 颿°ãšããã·ã¥é¢æ°
ããŠãããã·ã¥é¢æ°ã«è§Šãå§ãããšã©ã³ãã 颿°ãšã®éããæ°ã«ãªã£ãŠããŸãã
ããã·ã¥é¢æ°ãšã©ã³ãã 颿°ã¯ãã©ã¡ããæ»ãå€ã®äºæž¬ãé£ãããŽã¿æ··ããªæ°å€ãè¿ããŸããããããã©ã³ãã 颿°ïŒæ¬äŒŒä¹±æ°ïŒããã·ãŒãå€ãåãå Žåã¯ãæ¯ååãçµæã«ãªããã®ã§ãã
ã©ã³ãã 颿°ã¯ãåãå€ã«ãªãæ»ãå€ããåçã«ã©ã³ãã ã«è¿ãããšãããããšãç®çã§ããã€ãŸããåºåçµæã«åãããªãããã«ã©ã³ãã ã«å€ãåºåããããšããŸãããã®ãããã©ã³ãã æ§ã®æ§èœã¯ãOS ãã©ã€ãã©ãªãããŒããŠã§ã¢ã«äŸåãããããã·ãŒãå€ãåãã§ãããã¹ãŠã®ç°å¢ã§åãå€ãè¿ã£ãŠããä¿èšŒããªãã®ã§ãã
åé¢ãããã·ã¥é¢æ°ã®å Žåã¯ãã¢ã«ãŽãªãºã ãšåŒæ°ãåããªããã©ã®ç°å¢ã§ãæ¯ååãçµæã«ãªãããšããç¹ãã©ã³ãã 颿°ãšç°ãªããŸãã
ããã«ãããã·ã¥é¢æ°ã®å ŽåïŒç¹ã«æå·åŠçããã·ã¥é¢æ°ïŒã¯ããå ¥åå€ãç°ãªããªãããªãã¹ãåãå€ã®æ»ãå€ã«ãªããªãããã«è¿ãããšãããç¹ãç°ãªããŸãã
æå·åãšããã·ã¥å
ããŠããæå·åŠçããã·ã¥é¢æ°ããšèšãããŠãæå·åŠçïŒæå·çã§ãªãïŒããšæã£ãæ¹ãå€ããšæããŸãã
ããã¯ãæå·åŠã®èãæ¹ãåãå ¥ãããã»ãã¥ãªãã£çšéã«äœ¿ãããããã·ã¥é¢æ°ã ããã§ãã
ãæå·åŠçããã·ã¥é¢æ°ãã¯åŸããåºãŠããã®ã§ãããçŸåšã¯ä»ãåé§ããããã·ã¥é¢æ°ãšèšãã°æå·åŠçããã·ã¥é¢æ°ãæé»çã«æãããšãå€ããããŸãã
ããã·ã¥é¢æ°ã¯ãæå·ã®äžçãã§ãããšãŠããã䜿ããã颿°ã§ãæå·åããéã«ãå éšã§ãã䜿ãããŸãã
ãã®ããããããã·ã¥é¢æ°ããããŒã¿ãæå·åãã颿°ã®ã²ãšã€ãã®ããã«èª¬æããŠããããã°ããããŸãããéããŸããå³å¯ã«ã¯ãããŒã¿ã®æå·åã«é¢ä¿ãã颿°ã®ã²ãšã€ãã§ããããã·ã¥é¢æ°èªäœã¯æå·åããããã®ã§ã¯ãããŸããïŒåŸè¿°ããŸãããé¢é£ã¯ãããŸãïŒã
確ãã«ãå ããŒã¿ãšããã·ã¥å€ã®å¯Ÿå¿è¡šãå¥éçšæããŠããã°ã察å¿è¡šãæå·ã®è§£èªã³ãŒã衚ãšããŠã䜿ãããããæå·çšéãã«ã¯äœ¿ããŸãã
ããããæå·ã¯ãå¯éããã€ãŸãå ã«æ»ããïŒåŸ©å·ã§ããïŒãšããã£ãŠããããæå·ãšåŒã°ããŸãã
å察ã«ããã·ã¥é¢æ°ã¯ãéå¯éããã€ãŸããå ã«ã¯æ»ããªãããšãç¹åŸŽãã§ãããããããã·ã¥åã¯æå·åã§ã¯ãããŸããã
ãã©ãã®ã§ããããã®éãã¯æå€ã«éèŠãªã®ã§ãã
ãšèšãã®ããããã·ã¥é¢æ°ãç¥ããªããèå³ããªãçžæã«èª¬æããã®ãé¢åãªãããæå·ã®äžçš®ã§ãããšèšã£ãŠããŸããã®ã ãããããã·ã¥å€ã埩å·ãããããšãã人ãåŸãæã¡ãŸããããããã·ã¥åã=ãæå·å + å§çž®ããšåéããããŠããŸããã¿ãŒã³ã§ãã
ããã¯ããã¢ãŒã«ã€ããããå§çž®ããšèª¬æããããã®ã ãããtar ã§ã¢ãŒã«ã€ãããã®ã«ããµã€ãºãå°ãããªããªãããšåéããããããªãå°ããªããšãããããŸããããããããã®ãããªã¯ã¬ãŒã ãå
¥ãã人ã¯ãããã·ã¥å€ãã埩å·ããŠæ¬²ããããšèŠæããã®ã§ãã
ãŸãããæå·åŠçããã·ã¥é¢æ°ãã説æããæã«ãæå·åŠçãªç¹æ§ããããªããã°ãããªãããšããèšèããã誀解ãçãŸããŠããããã§ãã
ãïŒæå·ã®ç¹æ§ãšããããšã¯åŸ©å·ã§ãããã ãªïŒããšã
ã§ããŸããã
ããããã倧åã®ããã·ã¥é¢æ°åå¿è ãåéãããããšã§ã¯ãªãã§ãããããããèšãç§ãããã§ããã
ããã§éèŠãªçšèªã®èªèããããŸãããæå·ãã§ãã
ãšèšãã®ããå ã«ãæå·ã¯åŸ©å·ã§ããïŒå ã«æ»ããïŒãšããã£ãŠããããæå·ãšåŒã°ããŸãããšèšããŸãããå®ã¯ãããã¯ãããœã³ã³ãããèšç®æ©ããšèšã£ãŠããŸããããã®èªåŒããããŸãã
çŸåšãæå·ããšä»ããã®ã¯ãã»ãã¥ãªãã£ããšå矩ã§ããã©ã¡ãããäœããä»è ããå®ããã®ããšèããã°ããã£ãããããšæããŸãã
ã€ãŸããæå·åã»åŸ©å·ã ããæå·ãšåŒã¶ã®ã§ã¯ãªããæå·åŠãé§äœ¿ããã»ãã¥ãªãã£æè¡ããæå·ããšåŒã°ããŸãã
äŸãã°ãåŸè¿°ãããããã³ã€ã³ãªã©ã®ããã·ã¥å€ã®å¡ã¿ãããªãã®ã§ããæå·è³ç£ããšåŒã¶ã®ãæããäŸã§ãã
ãæå·è³ç£ããšèšãã®ã¯ãæå·åãããè³ç£ããšããæå³ã§ã¯ãªããæå·åŠã§ã»ãã¥ãªãã£ã匷åã»ä¿è·ãããè³ç£ããšããæå³ãªã®ã§ãããŒãç¥è蚌æãªã©ã®æå ç«¯ã®æå·æè¡ãé§äœ¿ãããŠããã®ã§ãã
ããŒãç¥è蚌æããæããã«äžèšã§èª¬æãããšãèªåãæã£ãŠããæ°å€ïŒæ å ±ïŒãçžæã«ç¥ãããããšãªããçžæã¯ãã®å€ãæ£ãããšç¢ºä¿¡ïŒç¢ºçãé«ããšèªèïŒã§ããæè¡ãã§ãã
èšãæãããšãçžæãæã£ãŠããæ å ±ãç¥ãããšãã§ããªãïŒæ å ±ããŒãã ïŒãããã®æ å ±ãæ£ãããšç¢ºä¿¡ããããã®æè¡ãã§ãã
æè¡ãšå€§è¢è£ã«èšã£ãŠããŸããã人éãæ¥åžžçã«äŒŒããã¯ããã¯ãå©çšããŠããŸãã
ãæ¬åœã«è¶³ãç®ãçè§£ããã®ãïŒäžžèŠãããŠããã ãã§ã¯ãªãã®ãïŒããšãããçžæã®é ã®äžãç¥ãããšãã§ããªãå Žåã¯ãçè§£ããŠããªããšè§£ããªããã¹ããç¹°ãè¿ãããšã§ç¢ºä¿¡åºŠãäžããŠç·åçã«å€æããŸãã
ãŸããã³ã¿ãèšäºãšæãããæ å ±ã«å¯ŸããŠã峿žé€šãäžæ¬¡æç®ãåºå žå ãªã©ããè£åããããããšã§ç¢ºä¿¡çãé«ãããŠãŒã¶ãŒã®è¡åãšåãã ã£ããããŸãã
ããŒãç¥è蚌æãã«ãããæ å ±ã¯æ°å€ãªã®ã§ããããæ¬åœã«æ¬äººã§ããããã蚌æãããããªã©ã«æŽ»çšã§ããŸãã
äŸãã°ãåŸè¿°ããå ¬ééµã»ç§å¯éµæå·ãå©çšãããã®ã§ããç§å¯éµããæ¬äººããäœæã§ããªãå€ããšããŠçŽã¥ããããšã§ãçžæãç§å¯éµãç¥ããªããŠããåœäººã§ããããšç¢ºä¿¡ïŒç¢ºçïŒãé«ãããããããŸãã
å ·äœçã«ã¯ãç§å¯éµããäœæãããæ€èšŒå¯èœãªå€ïŒäŸãã°å ¬ééµãããžã¿ã«çœ²åãçŽã¥ããããã·ã¥å€ãªã©ïŒããæ¬äººããã¢ã¯ã»ã¹ã§ããªãç®æïŒããŒãµãŒããŒãDNS èšå®ãããã°ã SNS ã®ãããã£ãŒã«æ¬ãªã©ïŒã«è€æ°ç®æã«èšçœ®ããŸãã
ãè€æ°ç®æãããã€ã³ãã§ãããã«ããçžæã¯ç§å¯éµãç¥ããªããŠãïŒç§å¯éµã®æ å ±ããŒãã§ãïŒæ¬äººã§ãã確çãé«ããè€åçã»ç·åçã«å€æã§ããããã«ããããšãããŒãç¥è蚌æãã®äžçš®ã§ããKeyoxide ãªã©ããã®ä»çµã¿ãå©çšããŠããŸãã
ããããå ¬é鵿å·èªäœããèªåãæã£ãŠããæ°å€ïŒç§å¯éµïŒãçžæã«ç¥ãããããšãªããçžæã¯ïŒå ¬ééµã«ããïŒãã®æ°å€ãæ£ããããšãç¥ãããšãã§ããæè¡ãã ã£ããããŸãã
ä»ã«ããåŸè¿°ãã Bitcoin ã Ethereum ãªã©ã®æå·è³ç£ã§ã¯äœãããã®çåœã«å¯Ÿãã蚌æã«æŽ»çšãããŸãã
ãããã®æå·è³ç£ã¯å ¬éãããã¯ãã§ãŒã³ãããŒã¹ã«ããŠããããã誰ã§ãçžæã®æ®é«ããã§ãã¯ã§ããŸãããããŠæ¯ã蟌ã¿ïŒå£åº§éã®æ®é«ç§»åïŒãããéã«ãæ¬åœã«æ£ããçžæå ïŒç§å¯éµãæã£ãŠããçžæïŒã«æ¯ã蟌ãã§ããããã¡ãããšæ¯ã蟌ãŸããããªã©ã«å©çšãããŸãã
詳ããã¯åŸè¿°ããŸãããå ¬éãããã¯ãã§ãŒã³ã«ãããåãåŒãã®éææ§ãšå ç¢æ§ïŒæ¹ç«ãžã®èæ§ãªã©ïŒãæ¬äººèšŒæã«å ãããããæå·è³ç£ã®æè¡ã¯æ³šç®ã济ã³ãŠããã®ã§ãããã¹ã¡ãã£ã¢ãèšããããªæ³å®é貚ã®ä»£æ¿ãšãªãããã§ã¯ãããŸããã
äœããããæ¥æ¬ã«ãããŠæ³å®é貚ã®ä»£ãããšãªãããžã¿ã«é貚ã¯ããã§ã«æ¥åžžã§äœ¿ãããŠããŸããV ãã€ã³ãïŒæ§ T ãã€ã³ãïŒã楜倩ãã€ã³ããd ãã€ã³ããSuica ãšãã£ããã€ã³ãã»ã·ã¹ãã ã§ãããããã³ã€ã³ãšéããçŽæ¥çŸéåïŒæéïŒã§ããŸããããæ¢åã®ãã€ã³ãã·ã¹ãã ã®æ¹ãïŒèªç€Ÿã·ã¹ãã ã®ããïŒæ±ºæžåŠçãéããæ¥åžžã®å©äŸ¿æ§ã¯é«ãã®ã§ãã
æ¥æ¬åœå ã§ãããã³ã€ã³ãæ¥åžžã«æµžéããªãã®ã¯ããã«ãæ®æ®µäœ¿ãããªãã®ãšåãçç±ã§ãããã§ã«ä¿¡çšã«è¶³ããé«é決æžå¯èœãªãã€ã³ãã·ã¹ãã ãã¯ã¬ãžãããªã©ã®ç¬èªæ±ºæžã·ã¹ãã ãæµžéããŠããããã§ããæ²çžã§ç±³ãã«ã䜿ããã®ã¯ãåãšåããããä¿¡çšãããå©çšäŸ¡å€ãããããã§ãã
éã«èšãã°ãèªåœã®æ³å»·é貚ãä¿¡çšã§ããªããããéïŒGoldïŒãå®å®ããå€è²šã«é Œãã±ãŒã¹ã§ã¯ããããã³ã€ã³ãªã©ã®æå·è³ç£ã¯æ®æ®µäœ¿ããããŸãããã·ã¢ãäžåœããšã«ãµã«ããã«ãè¯ãäŸã§ããããæå·è³ç£ãæ¥åžžã®æ±ºæžææ®µã§ã¯ãªãããã«ã®ããã«çºæ¿å¯ãã®å°è±¡ãããã®ã¯ãã®ããã§ãã
ãã®ããã«ãã»ãã¥ãªãã£ã«é¢ä¿ããããã·ã¥é¢æ°ã®äœ¿ãæ¹ãåºçŸ©ã®æå³ã§ãæå·ãã®äžéšã ã£ããããŸãã
ãã®ããããã®ãçŸåšã®æå·ã®åžžèããèªèããŠãã人ãèšããããã·ã¥åã¯æå·ã®äžçš®ã§ãããšããã®ã¯ãå®ã¯ééã£ãŠããªãã®ã§ããåé¡ã¯ããã®åžžèãèªèããŠããªã人ã«ãåãããã«èª¬æããŠããŸããããªã®ã§ãã
è±èªã§ããã° cipherãencryptionãcryptography ã¯éããã®ãªã®ã§ãããæ¥æ¬èªã«ç¿»èš³ããããã®ã¯ãã¹ãŠãæå·ãããæå·åããšç¿»èš³ãããã®ãåé¡ãããããŸãããæ¥æ¬èªé£ããã
æ¥æ¬èªãé£ãããšèšãã°ã翻蚳ã®åé¡ããããã·ã¥é¢æ°ãæå·ã®äžçš®ãšãã誀解ãã«é¢ä¿ããããšæããŸãã
æå·ã®è«æãããããªããªãããèªããš "ã by one-way encryption using hash ..." ãšããèšãæ¹ãå€ãåºãŠããŸãã
äžå¯§ã«èš³ããšã... ã®ãéç®ã«ãã埩å·ãé£ããæå·åãè¡ãããã«ããã·ã¥å€ã§ãããããšããæå³ã§ãã
ããããåºæ¬ãããã£ãŠãã人ã«ã¯é·ã£ãããã説æã§ãããããäžæ¹åæå·ãããã·ã¥ã§è¡ããã¿ããã«èš³ããŠããŸãã®ã ãšæããŸãã
åŸè¿°ãããäžæ¹åæ§é¢æ°ããçè§£ããŠããã£ãããšååŒããã°èš³ã¯ééã£ãŠã¯ããªããšãããã®ã§ããããããšãäžæ¹åæå·ãããã·ã¥ã§è¡ãããšèšããããšãããã·ã¥é¢æ°ã§äžæ¹åã«æå·åããããšæããŠããŸãããã§ãïŒãŸããïŒã
ãŸããæå·åŠã®äžçã§ã¯ã2 ã€ã®åºå®é·ã®ããŒã¿ã 1 ã€ã®éå¯éãªåºå®é·ããŒã¿ãšããŠåºåãã颿°ããOne-way compression functionãïŒäžæ¹åæ§å§çž®é¢æ°ïŒãšåŒã³ãŸãã
ãéå¯éãªåºå®é·ããŒã¿ã«ããããšããç¹ããããããã®é¢æ°ããhash functionããšãåŒã¶ããšãããããããæå·åïŒå§çž®ïŒããã·ã¥å€ããšèª€è§£ã®ãã説æã«ãªããã¡ãªã®ã ãšæããŸãã
ããŠã以äžãèžãŸãããšãæå·åŠçããã·ã¥é¢æ°ããæå³ããããšã¯ãã»ãã¥ãªãã£ç®çã§äœ¿ãããããã·ã¥é¢æ°ããšèšããŸãã
ãšã¯èšã£ãŠãã以äžã®æ¡ä»¶ã«ãæå·ã§ã䜿ãããèãæ¹ãïŒã¢ã«ãŽãªãºã ïŒãå©çšããŠããããã·ã¥é¢æ°ãšããã ãã®ããšã§ãïŒéèŠãªã®ã§ããïŒã
- ã
Aâ ïŒåŠçïŒ âBããšãããšã- ã
BããAããã¬ãŠã¯ãããªãã - ã
CããBãäœæã§ããŠã¯ãããªãã
- ã
ãã®ãããªãçæ¹åã®åŠçã¯ç°¡åã ããéæ¹åã¯é£ãããç³»ã®é¢æ°ïŒA â B ã¯ç°¡åã ã B â A ã¯é£ããå€ãè¿ããã®ïŒã One-Way Function ãšèšããŸãã
ãäžæ¹åæ§é¢æ°ãèªäœã¯æŠå¿µçãªãã®ã§ãå ·äœçã«ãããšãããã®ã¯ååšããŸããã
äŸãã°ã倧ããªçŽ æ°ãæãç®ããŠèªç¶æ°ãè¿ãã颿°ãªã©ãè¿ããã®ã§ãããªããªããéã®ãïŒå€§ããªå€ã®ïŒèªç¶æ°ããçŽ æ°ãç®åºããåŠçãã¯å€§å€ã ããã§ãã
ä»ã«ããå²ãç®ã®äœãããã€ãŸãå°äœïŒMOD ã %ïŒãªã©ããã䜿ãããŸãããªããªãéã®ãäœãã ãããèããããå
ã®å€ã®çµã¿åãããã¯ç¡éã«ããããã§ãã(A * B) % C = D ã®å ŽåãD ã®ã«ãŒããããã¿ãŒã³ãèŠãã° C ã¯äºæž¬ã§ããŠã A B ã®çµã¿åããã¯ç¡éã«ãããŸãã
hash(){
str="$1" OPTIND=1 # å
¥åãååŸ
prime=257 # ç§å¯ã®å®æ°
sum=0 # å²ãããæ°
# å
¥åæåããšã«ã«ãŒã
while getopts : na -"$str"
do
ascii="$(printf '%d\n' "'$OPTARG")" # ASCII ã³ãŒãã 10 鲿°ã§ååŸ
sum=$(( sum + ascii )) # å²ãããæ°ã«å ç®
done
h="$(( $(( $sum * $prime )) % 100 ))" # å ç®å€ã«ç§å¯ã®å®æ°ãæããŠå²ã£ãäœã
printf "%s:\t%02d\n" "$str" "$h" # 2 æ¡ã§åºå (00ã99)
}
- ãªã³ã©ã€ã³ã§åäœãã¿ã @ paiza.IO
ãã®ããã«ãäžæ¹åæ§é¢æ°ãã®èãæ¹ã¯æå·åã®åŠçã«ã¯éèŠã§ãããããŠããã·ã¥é¢æ°ãäžæ¹åæ§çãªæ§è³ªãæã£ãŠãããããæå·åŠçãã»ãã¥ãªãã£é¢é£ã§ãããã䜿ãããã®ã§ãã
ããŸãšãã
- ããã·ã¥é¢æ°èªäœã¯ã埩å·å¯èœãªæå·é¢æ°ã§ã¯ãªããã®ã®ãæå·æ¥çã§ã¯éç ²çã®äœ¿ããšããŠäŸ¿å©ã«ã³ã䜿ããã颿°ã§ãã
- ãã®ãåŒã³æ»ãã®ãé£ãããéç ²çã®äœ¿ãããæå·æ¥çã®é èªã§ãäžæ¹åæ§é¢æ°ããšåŒã¶
- ãããããåŒã³æ»ããªãããšãåæã®ããã·ã¥é¢æ°ããæå·åŠçããã·ã¥é¢æ°ããšåŒã¶
- ãæå·åŠçããã·ã¥é¢æ°ãã¯ãå®ã£ãŠãããããã®ïŒã»ãã¥ãªãã£åãã®ïŒé¢æ°ã§ããããç¥èãšãã身ã«ãžã¡æãæ±ããéãæ·±ãæ¥çåãã®é¢æ°ã§ãã
æå·åŠçã§ã¯ãªãã¢ã«ãŽãªãºã ïŒç Žæãšé¡äŒŒã®æ€ç¥ïŒ
ãããŸã§ã®è©±ãããŸãšãããšããæå·åŠçããã·ã¥ãã¯ä»ã®ã¢ã«ãŽãªãºã ãšæ¯ã¹ãŠãéå¯éæ§ããšãåäžæ§ããéèŠããã¢ã«ãŽãªãºã ã§ããã€ãŸãããç°ãªãããŒã¿ãåãããã·ã¥å€ã«ãªããªãããšããç®çãšããã¿ã€ããšèšããŸãã
éã«ãæå·åŠçã§ã¯ãªãããã·ã¥é¢æ°ããæ°å€ããããŸãã
äž»ã«ãæå·ïŒã»ãã¥ãªãã£ïŒç®çã§ã¯ãªããããŒã¿ã®ç¶æ ãã確èªããããã®ãã®ã§ããäŸãã°ãéå¯éæ§ãåäžæ§ããããããŒã¿ãå£ããŠããªããã®ç¢ºèªããç®çãšããã¿ã€ãã§ãã
ã€ãŸããç°ãªãããŒã¿ãåãããã·ã¥å€ã«ãªãå¯èœæ§ãé«ãããšãæ¿ç¥ã®äžã§ããããŸã§ãæå
ã®ããŒã¿ãå£ããŠããªããã確èªããããã®ãã®ã§ããæåãªãã®ã§ã¯ CRC ãªã©ããããŸãã
ããã·ã¥å€ããããŒã¿ã®æçŽãã ãšãããšãæå·åŠçããã·ã¥é¢æ°ã«æ¯ã¹ CRC ãªã©ã¯ãæçŽã®çš®é¡ïŒæžŠå·»ãç¶ãã²ã¥ãç¶ãåŒåœ¢ç¶ãå€åœ¢ç¶ãªã©ïŒã®ç¢ºèªããã§ããªãçšåºŠã®ãã®ããšèšãããããããŸããããæžŠå·»ãç¶ã§ããããã¯ç¢ºå®ã«èå¥ã§ããããæžŠå·»ãç¶ã®æçŽã®äººã¯å€ããã¿ãããªã€ã¡ãŒãžã§ãã
ããã§ãå£ããŠãªã = æ¹ãããããŠããªãããšããå Žåããã»ãã¥ãªãã£ç®çã§äœ¿çšããšãããªãããŒãããšæããæ¹ããããšæããŸããéãã
ã·ã£ãŒãã³ã®è¯ããã¢ã«æãã§ãããå²ããŠãããéšå±ã«å
¥ããããšæ€ç¥ã§ãã話ããèããããšã¯ãªãã§ããããããããŒã¿ãå£ããŠããªããã®ç¢ºèªããšã¯ãã·ã£ãŒãã³ã®è¯ãå²ããŠããªãããšåãã§ããã€ãŸããããèªäœã¯ã»ãã¥ãªãã£ã§ã¯ãªããå¿çšãã»ãã¥ãªãã£ãªã®ã§ãããã®ãããã»ãã¥ãªãã£ïŒæå·ïŒã®äžçã¯å¥¥ãæ·±ãã®ã§ãã
ä»ã«ããæå·åŠçããã·ã¥é¢æ°ã§ã¯ãªã
ããã㯠Perceptual HashïŒç¥èŠããã·ã¥ïŒãšåŒã°ãããæèŠçã«äŒŒããããªããŒã¿ãã®ç¢ºèªããç®çãšããã¿ã€ãã§ãã
ã€ãŸããããŒã¿ã®ç Žæãå®å šãªåäžæ§ã®ç¢ºèªããããããŒã¿ã®ç¹åŸŽã»ãã¿ãŒã³ãããã·ã¥å€ã«ããããšã§äŒŒããããªããŒã¿ã¯è¿ãæ°å€ããããã¯äŒŒããããã®äžŠã³ã«ãªãã®ããç¥èŠããã·ã¥ãã§ãã
ç¥èŠããã·ã¥ã¯ãäž»ã«ç»åã鳿¥œãšãã£ããã«ãã¡ãã£ã¢é¢é£ã®é¡äŒŒã³ã³ãã³ãã®æ€ç¥ã«äœ¿ãããŸããä»ã«ããæè¿ã§ã¯ãé¡äŒŒè«æã®æ€åºãããæ©æ¢°åŠç¿ã«ãããŠãé¡äŒŒããŒã¿ã®çæãæšè«ã«ã䜿ããªããããšãã£ãç ç©¶ãçãã§ãã
äŸãã° LLM ãªã©ã§ã¯ãåèªãèªå¥ã®é¢é£æ§ã空é軞ãšããŠãåèªãèªå¥ã倿¬¡å 空éã«é 眮ããŸãã
![]() |
|---|
| "Word embeddings and how they vary" @ ãã·ã¬ã³å€§åŠ AI ã©ããã |
ãããšãé¡äŒŒããæã¯é¡äŒŒããäœçœ®é¢ä¿å€ãæã€ããšã«ãªããŸãã
ãã®é¢ä¿å€ããããã³ã°ãããã®ïŒåº§æšãããŒã¹ãšããäœçœ®é¢ä¿ã®é
åãããã·ã¥å€ãšã¯èšãããEmbeddings ãšåŒã°ããé
åããŒã¿ïŒããDB ã®æ€çŽ¢ããŒãšããŠã³ã³ãã³ãã®èªç¶ææ€çŽ¢ã«æŽ»çšãããããŠããŸãïŒããã Semantic Search ãšèšããŸãïŒã
ç¥èŠããã·ã¥ã®å
·äœäŸãšããŠãé¡äŒŒç»åã®æ€ç¥ã§æå㪠pHash ãå®éã«èŠãŠã¿ããšãã³ãšãããããããŸããã
以äžã® 3 ã€ã®ç»åã¯äººéãèŠããšã䌌ããããªããŒã¿ãã§ããããããæå·åŠçããã·ã¥ããã§ãã¯ãµã çããã·ã¥ã®å Žåã¯ã1 ãããã§ãç°ãªããšãŸã£ããç°ãªãããã·ã¥å€ã«ãªããŸãã
![]() |
![]() |
![]() |
|---|---|---|
| MD5: 1776fb44ba995fff55ef3498f289b3ba | MD5: abd3a65a92022c0b1cb37b1d5bafb53e | MD5: 060eeab60cc578367f8cd22731a5774e |
察ããŠãPerceptual HashïŒç¥èŠããã·ã¥ïŒã¯ããŒã¿ã®é¡äŒŒæ§ãããã·ã¥å€ã«ããïŒæ°å€åããïŒè©Šã¿ã§ããäŸãã°ãå
ã®ç»åã 64bité·ïŒ16æ¡ïŒã® pHash ã«éããå Žåã以äžã®ããã«åãããã·ã¥å€ã«ãªããŸãã
![]() |
![]() |
![]() |
|---|---|---|
| pHash-64: ab85f430d0c3d35e | pHash-64: ab85f430d0c3d35e | pHash-64: ab85f430d0c3d35e |
ãŸããè§£å床ïŒåºåãããé·ïŒãé«ãããšãéãã¯åºãŠãããã®ã®ãã»ãŒäŒŒãå€ã«ãªããŸãã
Goèšèªã§å®è£ ãèŠã
package main
import (
"fmt"
"image"
"image/jpeg"
"os"
"github.com/corona10/goimagehash"
)
const (
file1 = "qiitan_color1.jpg"
file2 = "qiitan_color2.jpg"
file3 = "qiitan_mono.jpg"
imgShrinkSize = 8 // 8 -> 64bit pHash, 16 -> 256bit pHash, must be 2^N
)
func main() {
img1, err := getImg(file1)
panicOnError(err)
img2, err := getImg(file2)
panicOnError(err)
img3, err := getImg(file3)
panicOnError(err)
hash1, err := goimagehash.ExtPerceptionHash(img1, imgShrinkSize, imgShrinkSize)
panicOnError(err)
hash2, err := goimagehash.ExtPerceptionHash(img2, imgShrinkSize, imgShrinkSize)
panicOnError(err)
hash3, err := goimagehash.ExtPerceptionHash(img3, imgShrinkSize, imgShrinkSize)
panicOnError(err)
fmt.Printf("hash1: %x\n", hash1.GetHash())
fmt.Printf("hash2: %x\n", hash2.GetHash())
fmt.Printf("hash3: %x\n", hash3.GetHash())
}
func getImg(imgPath string) (image.Image, error) {
file1, err := os.Open(imgPath)
if err != nil {
return nil, err
}
defer file1.Close()
return jpeg.Decode(file1)
}
func panicOnError(err error) {
if err != nil {
panic(err)
}
}
ããŠããã® pHash ã®ä»çµã¿ãã¶ã¯ã£ãšèª¬æãããšãç»åãã¢ãã¯ãïŒã°ã¬ãŒã¹ã±ãŒã«ïŒã«å€æããŠãäžå€®å€ããã®æ¿æ·¡ã®å€åããã¿ãŒã³ã«ããåºå®é·ã®é
åã«ãããã³ã°ãããã®ãã§ãã
ãšã¯èšããåçŽã«äœè§£å床ã®ã¢ãã¯ãã»ã¢ã¶ã€ã¯ç»åãé åã«ãããã®ã§ã¯ãããŸãããJPEG ã MP3 ã®å§çž®ãªã©ã§ã䜿ããããå·®åã®éãããã¿ãŒã³åããã¢ã«ãŽãªãºã ã䜿ã£ãŠããŸãã
ããã§èšãããã¿ãŒã³åããšã¯ãæ°å€ã®å€åãæ³¢ãšèŠãªããè€æ°ã®æ³¢ãçµã¿åããã£ããã®ããšããŠãåçŽãªæ³¢ïŒãµã€ã³æ³¢ïŒã«åè§£ããããšãèšããŸãããããŠåã ã®æ³¢ã®æåããããã³ã°ãããã®ãããã·ã¥å€ãšããŸãã
äŒãããããããŸããããé»å鳿¥œã§èšãã·ã³ã»é³æºãšéã®ããšãããã€ã¡ãŒãžã§ããåã ã®ãªã·ã¬ãŒã¿ãŒã®èšå®å€ïŒãã©ã¡ãŒã¿ãŒïŒããããã³ã°ãããããªãã®ãã¿ãããªããããã¯ããŒãªãšå€æã£ãŠãã€ã§ãã
ãããŠãã©ãã ãé¡äŒŒããŠããããããã³ã°è·é¢ã§èšæž¬ããŸãã
ããã³ã°è·é¢ãšããã®ã¯ãåãé·ãã® 2 ã€ã®ããŒã¿ãæ¯èŒããæãéããå°ãªãã»ã©è·é¢ãè¿ãïŒé¡äŒŒããŠããïŒãšããèãæ¹ã§ãã
å ·äœçã«ã¯ã䞊ã³ã®éãç®æã®æ°ãè·é¢ãšããŸããäŸãã°ã2 ã€ã®ããã·ã¥å€ã xor ããå€ïŒ2 ã€ãç°ãªãå Žå㯠1 ã«ããåŠçïŒã®ãããã®æ°ãæ°ãã1 ã®åºçŸæ°ãå°ãªãã»ã©è·é¢ãè¿ããšèããŸãã
func HammingDistance(a, b []uint64) (int, error) {
if len(a) != len(b) {
return -1, errors.New("different length of input")
}
dist := 0
for i := range a {
// (a xor b) ããçµæã®ãããã 1 ã®æ°ãå ãã
dist += bits.OnesCount64(a[i] ^ b[i])
}
return dist, nil
}
Go ã®ãœãŒã¹ã³ãŒããã¿ã
package main
import (
"errors"
"fmt"
"image"
"image/jpeg"
"math/bits"
"os"
"github.com/corona10/goimagehash"
)
const (
file1 = "qiitan_color1.jpg"
file2 = "qiitan_color2.jpg"
file3 = "qiitan_mono.jpg"
file4 = "keinos_logo.jpg"
imgShrinkSize = 16 // 8 -> 64bit pHash, 16 -> 256bit pHash, must be 2^N
)
func main() {
images := []string{file1, file2, file3, file4}
lenImages := len(images)
hashes := make([][]uint64, lenImages)
for index, imgPath := range images {
img, err := getImg(imgPath)
panicOnError(err)
pHashed, err := goimagehash.ExtPerceptionHash(img, imgShrinkSize, imgShrinkSize)
panicOnError(err)
hashes[index] = pHashed.GetHash()
fmt.Printf("hash #%d: %x\n", index, hashes[index])
}
for i := range lenImages {
for j := range lenImages {
if i == j {
continue
}
dist, err := HammingDistance(hashes[i], hashes[j])
panicOnError(err)
fmt.Printf("Distance between #%d and #%d: %d\n", i, j, dist)
}
}
}
func HammingDistance(a, b []uint64) (int, error) {
if len(a) != len(b) {
return -1, errors.New("different length of hashes")
}
dist := 0
for i := range a {
dist += bits.OnesCount64(a[i] ^ b[i])
}
return dist, nil
}
func getImg(imgPath string) (image.Image, error) {
file1, err := os.Open(imgPath)
if err != nil {
return nil, err
}
defer file1.Close()
return jpeg.Decode(file1)
}
func panicOnError(err error) {
if err != nil {
panic(err)
}
}
ã¡ãªã¿ã«ãé¡äŒŒç»åã®ããã·ã¥ã«ã€ããŠãè±èªã§ãã以äžã®åç»ãåèã«ãªããŸãã
- SPED Talk Image Hashing @ Youtube
- è«æ: AN IMAGE SIGNATURE FOR ANY KIND OF IMAGE | PDF by ããã¢ã«ãç ç©¶æ @ ãã³ã·ã«ããã¢å·ç«å€§åŠ
- è«æã®èª¬æåç»: Ryan Henderson - One in a billion: finding matching images in very large corpora @ Youtube
äœã¯ãšãããããããã®ããã·ã¥ã»ã¢ã«ãŽãªãºã ã§ãã£ãŠããããŒã¿ãç¹å®ããæçŽã®ãããªãã®ãã§ããããšããã€ã³ãã§ãã
ç Žæãã§ãã¯
å
ã«è¿°ã¹ã CRC ã fnv ãªã©ã®ãããŒã¿ãå£ããŠããªããã®ç¢ºèªãã«äœ¿ãããå€ã¯ããã§ãã¯ãµã ããšãåŒã°ããŸãã
ããããåŠè¡çã«ã¯ãCRCããšããã§ãã¯ãµã ãã¯å¥ç©ã§ããåã ã®ã¢ã«ãŽãªãºã ãååšããããã§ããé¢åèãã®ããå®çšé¢ã§ãã§ãã¯ãã£ãžããçã«äœ¿ãããå€å šè¬ãããã§ãã¯ãµã ããšåŒã¶ããšãããããšã§ãã
ãã§ãã¯ãã£ãžãããšããã®ã¯ãäŸãã°ãããŒã³ãŒãã®æåŸã® 1 æ¡ã®æ°å€ïŒãã£ãžããïŒãªã©ã§ãã
![]() |
|---|
| ããŒã¿ã¯â123âããã§ãã¯ãã£ãžããã¯â6âã®ããŒã³ãŒã ïŒããã§ãã¯ãã£ãžãããšã¯ã ããŒã³ãŒãã®ããã¿ @ ããŒãšã³ã¹ããïŒ |
äžã®äŸã§ã¯ãããŒã³ãŒãã»ãªãŒããŒã¯å€ "1236" ãèªã¿åããšãæåŸã® 1 æ¡ãé€ãå€ïŒããã§ã¯ "123"ïŒããŽãã§ãŽãã§ãšèšç®ãããæåŸã® 1 æ¡ïŒããã§ã¯ "6"ïŒãšåãã«ãªããããšç¢ºèªããããšã§æ£åžžã«èªã¿åããã確èªããŸãã
ä»ã«ãã身è¿ãªãšããã§ã¯ã¯ã¬ãžããã»ã«ãŒãã®çªå·ã«ããã§ãã¯ããžãããä»ããŠããŸããã«ãŒãèªäœãæå¹ã§ãããã確èªããåã«ãããããå ¥åãããïŒèªã¿åã£ãïŒçªå·ãæ£åžžã«èªã¿åããã確èªããå¿ èŠãããããã§ããã«ãŒãäŒç€Ÿã«ãã£ãŠãã§ãã¯ã«äœ¿ãããã¢ã«ãŽãªãºã ã¯ç°ãªããŸãããæåãªãšããã§ã¯ Luhn ã¢ã«ãŽãªãºã ããããŸãã
- Go ã§ Luhn ã¢ã«ãŽãªãºã ã®åäœãèŠãŠã¿ã @ Go Playground
ãã®ããã«ãæåŸã®æ°å€ãã€ãŸãèªã¿åããšã©ãŒãæ€ç¥ããã®ã«äœ¿ãããæ°å€ããã§ãã¯ãã£ãžããã§ãã
ãããŠãããã·ã¥å€ã䌌ããããªç®çã®ããã«äœ¿ãããå Žåã«ããã§ãã¯ãµã ããšåŒã°ããããšããããŸãïŒãSHA-256 ãªã®ã«ãã§ãã¯ãµã
ãã®ãããã¢ã«ãŽãªãºã ãšããŠã®ããã§ãã¯ãµã ããšãçšéãšããŠã®ããã§ãã¯ãµã ããããããšã«æ³šæããŸãããã®èšäºã§ã¯ CRC ããã³ãã§ãã¯ãµã ã®äž¡ã¢ã«ãŽãªãºã ãããã§ãã¯ãµã ç
ãªããæå·åŠçã¢ã«ãŽãªãºã ã«æ¯ã¹ããã§ãã¯ãµã çã¢ã«ãŽãªãºã ã¯éããã®ã®ãæ¹ç«
ç¹ã«æ¹ç«ã«å¯ŸããŠã¯ããšãŠã€ããªã匱ãã§ãã
ç°ãªãå€ãªã®ã«ç°¡åã«è¡çªãããïŒåãããã·ã¥å€ã«ãããïŒããšãã§ããŠããŸããŸããããã¯ãæå³ããªãã³ãŒããå·®ã蟌ãããšãã§ãããšããããšã§ããããŸãã
äŸãã°ãfooããšããã³ãŒãã«ãthis is a bad codeããšããã³ãŒããå·®ã蟌ã¿ã€ã€ãã0x1ff172ecããšãã調æŽãå ããããšã§ãåãããã·ã¥å€ã«ããããšãã§ããŠããŸããŸãã
package main
import (
"fmt"
"hash/crc32"
)
func main() {
// Expected code
goodCode := "foo"
hashGolden := crc32.ChecksumIEEE([]byte(goodCode))
fmt.Printf("Good: %x\n", hashGolden)
// Inject malicious code "this is a bad code" with adjustment value
badCode := goodCode + "\nthis is a bad code\n\x1f\xf1r\xec"
hashHacked := crc32.ChecksumIEEE([]byte(badCode))
fmt.Printf("Bad : %x\n", hashHacked)
//
// Output:
// Good: 8c736521
// Bad : 8c736521
}
- ãªã³ã©ã€ã³ã§åäœãèŠã @ GoPlayground
ããã¯ããã§ãã¯ãµã çã¢ã«ãŽãªãºã ããããšãæŒç®çµæããå ã®ããŒã¿ã¯éç®ã§ããªãã£ããšããŠããããŒã¿ã®æ¹ç«ãããããããšèšãããšã§ãã
ã€ãŸããããã·ã¥å€ã®ãããšããååãããå Žåã«ãå 容ã¯åããããšããã¯ã¯ããããšæµããèªãŸãããããããŠããŸãå¯èœæ§ãããããšèšãããšã§ããããŸãã
ãã®ãããæµããŠããããŒã¿ã«åé¡ã¯ãªãããã®ç¢ºèªã«ããç Žæãã§ãã¯ãã«ã¯ãã§ãã¯ãµã çã¢ã«ãŽãªãºã ã䜿ãããæ¹ç«ãã§ãã¯ãã«ã¯æå·åŠçã¢ã«ãŽãªãºã ã䜿ãããšãã£ãç¹åŸŽã«åããã驿驿ã®å€æãå¿ èŠã«ãªããŸãã
ãšã¯èšããæ°ãã€ã¯ãç§ã®å·®ã売ãäžãã«å€§ãã圱é¿ããããªã©ããã»ã©ã·ãã¢ãªæ¡ä»¶ã§ãªãéããæå·åŠçã¢ã«ãŽãªãºã ã䜿ãã®ãããã§ããããæå·åŠçã¢ã«ãŽãªãºã ã¯ãã§ãã¯ãµã ãšããŠã䜿ããããã§ããïŒéã¯ã§ããªãïŒ
䜿ããªã SHA-2 系㮠SHA-512 ã SHA-3 系㮠SHA3-256 ãªã©ã®åŒ·ãã®ã¢ã«ãŽãªãºã ãªãããªããã¹ãã§ããåŠçæéãªã©ã®ã³ã¹ããèš±ãéããã¿ãŒãªãã®ãéžã³ãŸããããçµã¿äžãã£ãŠãããã¹ããªãã®ã«èª¿æŽããŠè¡ã£ãæ¹ããããšæããŸãã䟿å©ã§äžåºŠãããµã€ãºã® MD5 ã¢ã«ãŽãªãºã ã倧äºãªå±é¢ã§äœ¿ã£ãŠãããšæå·èŠå¯ããã£ãŠããŸããã
CRC ãããã·ã¥é¢æ°ã®ã¢ã«ãŽãªãºã ã«å«ããçç±
ãã®èšäºã§ CRC ãªã©ã®ãã§ãã¯ã»ãµã çã¢ã«ãŽãªãºã ããããã·ã¥é¢æ°ã®ã¢ã«ãŽãªãºã ã«å«ããçç±ã§ãããåçŽã« List of Hash Functions ã«å«ãŸããŠããããããŠãã®ããã°ã©ãã³ã°èšèªã®ããã·ã¥é¢æ°ã䜿ãã¢ãžã¥ãŒã«ã«å«ãŸããŠããããã§ãã
- List of Hash Functions @ Wikipedia
ããã§å ã®ããã§ãã¯ãµã çããã·ã¥é¢æ°ã¯ããã·ã¥ãšåŒãã§ããã®ãåé¡ããåºãŠããŸããã€ãŸããCRC ããã§ãã¯ãµã ã¯ããã·ã¥ã§ã¯ãªãããšèšã話ãã§ãã
CRC ããããã·ã¥ã§ã¯ãªãããšèšãããäž»ãªçç±ã« 2 ã€ãããŸãã
- CRC ã¯å€é
åŒã§è¶³ããã
XORããã ãã®å€ã ãããäºæž¬å°é£ããšã¯èšããªãã - CRC ã¯ãèª€ãæ€åºèšæ£ãã«ã䜿ããã®ã§ãå ã«æ»ãããããéç®äžå¯ããšã¯èšããªãã
æå·åŠçããã·ã¥ãšæ¯ã¹ãã¿ãŒã³ãçŸããããããšãããæåã®ãäºæž¬å°é£ãšã¯èšããªããã¯ããããŸããæ¬¡ã« 2 ã®ãèª€ãæ€åºèšæ£ã«äœ¿ãããã§ãããããïŒèšæ£ããšæãããããç¥ããŸããã
CRC 㯠Cyclic Redundancy CheckïŒå·¡ååé·æ€æ»ïŒã®ç¥ã§ããã€ãŸã CheckïŒæ€æ»ïŒãšããããã誀ãããæ€åºãããããã®ãã®ã§ãèšæ£ãã«ã¯äœ¿ããªããšéãã³ã³ãã©ç¶æ
ã ã£ãã®ã§ããããªããšèšæ£ã«ã䜿ããããã§ãã
- Bitfilters | Mathematics of Cyclic Redundancy Checks @ Wikipedia
ð  ã¡ãªã¿ã«ãèª€ãæ€åºèšæ£ãã§ãããã³ã³ãã¥ãŒã¿ã§ã¯ ããŒã¿ãå£ããŠããå Žåã«èªå修埩ããæ©èœãããããããã§äœ¿ãããŠããŸããäŸãã° CD ã HDD ã®èªã¿èŸŒã¿ãéä¿¡ã®ãã±ãããªã©ã§ããè±èªãªã®ã§ããã以äžã®åç»ãåºæ¬çãªèãæ¹ããããããã説æããŠããŸãã
-
Hamming codes and error correction | 3Blue1Brown @ YouToubeïŒè±èªïŒ
- ããã³ã°ç¬Šå· @ WikipediaïŒæ¥æ¬èªïŒ
ããããããã¯ããŒã¿ã修埩ããæã« CRC ã®ã¢ã«ãŽãªãºã ïŒèãæ¹ïŒã䜿ããããšãããã ãã§ããCRC ã®ã¢ã«ãŽãªãºã ã§ããã·ã¥åãããã®ãšã¯æ ¹æ¬çã«ç®çãéããŸãã
ãããããšã次ã«ãããããããããã§ãã¯ãµã ãªãã ããããã·ã¥ãšã¯èšããªãããšèšããæåã®è°è«ãåºãŠããŸãã
ããã¯ãåŠè¡å¯ãã®æ£ããç®ç·ããšãäžè¬å®çŸ©ããããŠãŒã¶ç®ç·ãã®éãã®ãããªãã®ã§ãããªããªãã確ãã«å³å¯ãªæå³ã§ã¯ CRC ã®å€ã¯ããã·ã¥å€ã§ã¯ãªãããã§ãããã®è°è«ã¯ãæµ·å€ã®æ²ç€ºæ¿ã SNS ã§ããã°ãèŠåããããŸãã
ããããããã¯ããã°ã©ã ã§èšããæååããŒã¿ããšããã€ããªã»ããŒã¿ãã®éãããæååã ã£ãŠãã€ããªã ããããšèšãè°è«ãããã©ã³ãã ãšèšã£ãŠãã©ã³ãã ã§ã¯ãªãããšèšã£ãè°è«ãšäŒŒãæ§è³ªãæã£ãŠããŸãããŠãŒã¶ãŒãšãå éšïŒã®ä»çµã¿ïŒãç¥ããã®ã®éã§ã®é£ãéãã§ãã
ããããŒã³ã®ç ç©¶ãããŠããŸãããšèšã£ãŠããã®ã«ãã©ãžã³ã³ã®ç ç©¶ãããŠããã§ãã£ãŠããšãèšããããããã¢ãã¿ãšçš
ããŸã©ã CRC ãªããŠäœ¿ãæããã®ïŒ
SHA-2 ã SHA-3 ãªã©ã®ããšããšãªããã·ã¥ã»ã¢ã«ãŽãªãºã ãç¥ã£ãŠããŸããšãCRC ãªã©ã®ãã§ãã¯ãµã çã¢ã«ãŽãªãºã ãªãããªã¯ã³ã³ãšæãããã¡ã§ãã
ãšããããæå€ãªãšããã§äœ¿ãããã®ãããŒã¿ãŒããŒã¹ïŒä»¥äž DBïŒã®è² è·åæ£åŠçã§ãã
äŸãã°ããªã¯ãšã¹ããããããŒïŒkeyïŒã«å¯ŸããŠããªã¥ãŒïŒvalueïŒãè¿ãã ãã®é£æ³é
åã®ãããªãããŒã»ããªã¥ãŒåã® DB ã§ã¯ãè² è·ã忣ããããã«äœ¿ãããŸãã
ãšèšãã®ãããªã¯ãšã¹ãæ°ãããŒã¿éãå€ããªã£ãå Žåãè€æ°ã®ããŒãã«ããŒã¿ãåããå¿ èŠãåºãŠããŸãïŒããã§èšãããŒããšã¯ãè€æ°å°ã§ 1 ã€ã®ãµãŒãã¹ãæäŸããŠããå Žåã® 1 å°ã®ããšã§ãïŒã
ãã®æãã©ã® DB ããŒãã«ããŒã¿ãä¿åãããã»ãªã¯ãšã¹ãããããæ±ºããã®ã«ããªã¯ãšã¹ããããããŒãããã·ã¥é¢æ°ã«éãããã®å€ãããŒãã®å°æ°ã§å²ã£ãäœãïŒäœå°ãmodïŒã䜿ããŸãã
nodeCount = 3 // 3å°ã® DB ããŒãã§ã¯ã©ã¹ã¿ãªã³ã°ãã
nodeID = crc16(key) % nodeCount // 0ã2 ã® ID ã«åãããã
ãªã¯ãšã¹ãæ¯ã«æ¥ç¶å ãé çªã«åãæ¿ããã©ãŠã³ãããã³æ¹åŒãçºå±ãããèãæ¹ã§ããªã¯ãšã¹ãã»ããŒãåããªã決ãŸã£ãããŒãã«è»¢éã§ããŸããã¡ãªãããšããŠã¯ãã©ãŠã³ãããã³ã®ããã«å šãŠã®ããŒããåãããŒã¿ãæã€å¿ èŠããããŸããããŸããããã·ã¥å€ãè¡çªãããšããŠãåãããŒãã«éãããã ããªã®ã§ãé床ãåªå ã§ããŸãã
ãããããã®ãŸãŸã ãšããŒãã®å¢æžã«ãã¬ãã·ãã«ã«å¯Ÿå¿ã§ããŸãããããã§ããããããããŒãã«è€æ°ã® ID ããããã³ã°ããŠãããŸãããããŠãããŒããå¢ããããããã³ã°ããããŒã¿ã®äžéšãç§»åãããŸãããã®èãæ¹ãå©çšãããæåãªãšããã§ã¯ Redis ãªã©ããããŸãã
- Overview of Redis Cluster main components | docs @ redis.io
ãããã·ã¥å€ããšãæå·ãã®é¢ä¿
ããŠãããã·ã¥åã¯æå·åã§ã¯ãªãããšã¯èšã£ããã®ã®ããã·ã¥å€ã¯æå·ãšå¯ã«é¢ä¿ããŠããŸãã
ããã¯ãããã·ã¥å€ã¯æå·ããŒã¿ã®æ ä¿æ å ±ãšããŠã䜿ãããããã§ãã
ç¹ã«æå·éä¿¡ã«ãããŠã¯ãåã£ãŠãåããªãé¢ä¿ãã«ãããŸããå ¬ééµã»ç§å¯éµæå·ã§ã¯ãå ¬ééµãæ ä¿ããæ å ±ãšããŠã䜿ãããããã§ããä»ã«ããåŸè¿°ããŸããããäºãã®ç§å¯éµãå ±æããã«çžæã®å ¬ééµããå ±éã®éµãäœæããéã«ããããã·ã¥é¢æ°ã掻çšããããããŸãã
ãã³ã©ã ããå ¬ééµã»ç§å¯éµæå·ããšã¯
ð ãäœè«ããå
¬ééµã»ç§å¯éµæå·ããšã¯
ãå ¬ééµã»ç§å¯éµæå·ãïŒéç§°ãå ¬é鵿å·ãïŒãšã¯ããã¢ãšãªã A ãš B ã®ïŒã€ã®éµããããçæ¹ã®éµã§åŠçãããã®ã¯ãããçæ¹ã®éµã§ããéåŠçã§ããªãã¿ã€ãã®æå·ã§ãã
ã€ãŸããçæ¹ã®éµã§æå·åããããçæ¹ã®éµã§åŸ©å·ãããããããã¯ãçæ¹ã®éµã§çœ²åããããçæ¹ã®éµã§æ€èšŒãããã¿ã€ããšããããšã§ãã
äŸãã°ãA éµ ã§æå·åãããã®ã¯åã A éµ ã§ã¯åŸ©å·ã§ããŸããããã¢ãšãªã B éµ ã§ãã埩å·ã§ããŸããããŸãããã®éããããA éµ ã§çœ²åãããã®ã¯åã A éµ ã§ã¯æ€èšŒã§ããŸããããã¢ãšãªã B éµ ã§ããæ€èšŒã§ããŸããã
ãã®ç¹åŸŽã«ãããçæ¹ã®éµãå ¬éããŠããããã®å ¬éããŠããéµã§çžæã«æå·åããŠããããã°ãããçæ¹ã®éµãæã€ãã®ã§ãªããã°åŸ©å·ã§ããªãããŒã¿ãäœããŸããåæ§ã«ãçæ¹ã®éµã§çœ²åããŠããã°ãããçæ¹ã®å ¬éããŠããéµã§èª°ããæ€èšŒã§ããŸãã
éµãå ¬éããŠãã®ã«ãå®å šã«æå·éä¿¡ããã¡ã€ã«ã®ãããšããè¡ããéæ³ã䜿ããŸããéµãå ¬éããŠãã®ã«ãã§ãã
ã¡ãªã¿ã«ãéµããšã¯ãå®è³ªçã«ããããããã¹ã¯ãŒããšåã圹å²ããããã®ã§ããã¯ãŒãïŒåèªïŒã§ã¯ãªããèŠããããªããããã®é·ãäžèŠåãªæååããããã¯ããããã¡ã€ã«ã«ãããã®ããéµããšåŒã³ãŸãã
ãããŠäžè¬çãªãã¹ã¯ãŒããšã®éãã¯èªåã§æ±ºãããããã®ã§ã¯ãªãããšã§ããäŒãããããããŸããããã埩掻ã®åªæãããã¡ã€ã«ã«èœãšãããããªãã®ã§ããïŒå ·äœçãªéµã®äŸ @ GitHubïŒ
ããããæ¬è³ªçã«ã¯ããã®ã«ã®ãšãªããããããŒãã€ã³ããã®ããã«ãéèŠãªéšåãåŒãåºããã®ãããéµkeyãïŒéµïŒãªã©ãããvalueãïŒäŸ¡å€ïŒãåŒãåºãåæ§ã®æå³ã§ãã
ãã®ãããéµããšããåèªãåºãŠããããæå·é¢é£ããšèšãæã蟌ã¿ãæšãŠãŠãããŒ
ããŠãå
¬ééµã»ç§å¯éµæå·ã§éèŠãªã®ã A éµ ãš B éµ ã¯ã芪ããšãåãã®é¢ä¿ã«ãªã£ãŠããããšã§ããã芪ã®éµãããã¯åããåã®éµãã¯äœåºŠã§ãäœæã§ããŸããããã®éïŒåãã芪ã®éµïŒã¯äœæã§ããŸããã
ãã®ããã芪ãã®éµã§æå·åããããŒã¿ã¯åãã芪ãã®éµã§ã¯åŸ©å·ã§ããŸãããã埩å·ã«å¿ èŠãªãåãã¯äœããŠããŸããšããããšã§ããã€ãŸãããŠãŒã¶ãŒã¯ã芪ã®éµããã倧åã«ä¿ç®¡ããŠããã°ãããå¿ èŠãªæã«ãåã®éµããäœæããå€éšã«ãåã®éµããå ¬éããã®ãäžè¬çã§ãã
ãã®ããšãã芪ã®éµããç§å¯éµããåãšãªãéµããå
¬ééµããšåŒã³ãŸããç§å¯éµã¯ãã·ãŒã¯ã¬ããã»ããŒ
泚æç¹ãšããŠããç§å¯éµããå ¬ééµãã¯å¿ ãããæå·åã»åŸ©å·ã«äœ¿ãããã®éµãæãããã§ã¯ãããŸããã
ãvalueãïŒäŸ¡å€ïŒãåŒãåºãã®ã«å¿ èŠãªãkeyãïŒéµïŒã®ãã¡ãå ¬éãããã®ããå ¬ééµããå ¬éããŠã¯ãããªããã®ããç§å¯éµããšèšããŸããæå·åã«äœ¿ããªããã®ã§ããç§å¯éµãå ¬ééµãååšããŸããäŸãã°çœ²åéµãªã©ã§ããããŸããŸãæå·åã«äœ¿ãéµã眲åã«äœ¿ãããšããã ãã§ãã
ãã®ãããå ¬é鵿å·ãšãæå·ããšèšããªããããçæ¹ã®éµã§çœ²åãããã®ã¯ãããçæ¹ã®éµã§ããæ€èšŒãã§ããªãã¿ã€ãã®æå·ïŒã»ãã¥ãªãã£ïŒæè¡ããå ¬é鵿å·ãã® 1 ã€ã§ãã
ããŠãä¿ã«èšããããŒã¿ã®æå·åãã§ããããå ¬ééµã§æå·åãããç§å¯éµã§åŸ©å·ããããšãã£ã説æã®èšäºãå€ãã®ã§ãããæå·åèªäœã¯ã©ã¡ãã®éµã§ãã§ããŸãããå察ã®éµã§åŸ©å·ã§ããŸããã¢ããªããèŠãã°ãéµãéãã ãã§ããã£ãŠããããšã¯åŸ©å·ãšããã ãã§ãã
ãšã¯èšããèªåã®ç§å¯éµã§ããŒã¿ãæå·åããŠãå ¬ééµãäžè¬ã«å ¬éãããŠãã以äžã誰ã§ãå ¬ééµã§åŸ©å·ã§ããŠããŸãæç¹ã§ãã»ãã¥ãªãã£ãšããŠã¯ãäœã®å¯Ÿçã«ããªã£ãŠããªãããšå矩ã§ããã€ãŸããããŒã¿ãµã€ãºãç¡é§ã«å€§ãããçŽ äººã«ã¯ãªã¹ã¹ã¡ã§ããªããã¡ã€ã«ãã§ããã ãã§ãããããã£ãæå³ã§ãå ¬ééµã§æå·åãããç§å¯éµã§åŸ©å·ããããšãã£ã説æããããŠããã®ã§ãã
ããã§ã¯ãå ¬ééµãäžè¬å ¬éããã«ãå®å šãªæ¹æ³ã§çžæã«æž¡ãã°ããšããå Žåã¯ããã£ãŠããããšã¯å ±é鵿å·ãšå€ãããŸãããã€ãŸããå ±é鵿å·ã䜿ã£ãæ¹ã埩å·ãéããããŒã¿ãè»œãæžã¿ãŸãã
ããã®äžã®å šãŠããããã«ãããŠããããšãç§å¯éµã§æå·åãããå®ã®å ¬ééµãã©ããã«é ããŠããããããã®æµ·ãèªæµ·ããããããªå Žåã«ãã广ã¯ãªãã§ãããããã®å Žåã§ããã°ãå ±ééµã®ããã«ããå®ãå ¥ãæ¿ããŠåãå ±ééµã§åæå·åãããããšã¯ãªãããã§ãã
äžç¹å®å€æ°ã§ã¯ãªãç¹å®ã®çžæã§ããã°ãããã²ãšå·¥å€«ããããšã§ã»ãã¥ãªãã£çãªå¯Ÿçã«å€è²ããŸãã
ããã¯ããäºéã«æå·åããããšãã§ããã€ãŸããèªåã®ç§å¯éµã§æå·åããããŒã¿ããããã«çžæã®å ¬ééµã§æå·åããã®ã§ãã
ããã®äœããã»ãã¥ãªãã£çãªå¯Ÿçãã«ãªãããšèšããšãçžæã¯èªèº«ã®ç§å¯éµã§åŸ©å·ããã®ã¡ãéä¿¡è ã®å ¬ééµã§ããã«åŸ©å·ããããšã§ã確å®ã« 2 è éã«éå®ããæå·ããŒã¿ããããšãã§ããŸããéã«ãåçŽã«ãèªåãä¿èšŒããããŒã¿ã§ãããããšãå ¬èšïŒèšŒæïŒãããã®ã§ããã°ãç§å¯éµã§çœ²åããæ¹ã广çã§ãããã
ããŠããã®ïŒã€ã®éµïŒå ¬ééµãšç§å¯éµïŒã§ãããäžè¬çïŒïŒïŒãªæ¹æ³ãšããŠçŽ æ°ã®æŠå¿µã掻çšãããŠããŸãã
äŸãã°ãèªç¶æ° 15 ãçŽ å æ°åè§£ãããš 3 ãš 5 ã§ãããããã3 ãšããæ°ãã㯠15 ã¯ããããŸããã3 ã®çŽ æ°ãæã€èªç¶æ°ïŒæ£ç¢ºã«ã¯åææ°ïŒã¯ç¡éã«ããããã§ãããŸããåæ§ã« 5 ããã 15 ã¯ããããŸãããã3 ãš 5 ãã㯠15 ãç°¡åã«ããã£ããã15 ãš 3 ãã㯠5 ãäœæã§ãããããªèãæ¹ãããããã«å·¥å€«ãããŠããŸãããã¡ããä»ã®ã¢ã«ãŽãªãºã ããããã©ããé£ããããŠããããŸããã
ããããå ¬ééµã»ç§å¯éµæå·ãã¯æ¬ ç¹ãæã£ãŠããŸããã倧ããªããŒã¿ã®æå·åãèŠæããªã®ãšãé ããããšã§ããç¹ã«å€§ããªããŒã¿ãæå·åããå Žåã¯ãããŒã¿ããã£ã³ã¯ïŒã¶ã€åãïŒã«ããŠããåã ãåå¥ã«æå·åã㊠1 ã€ã«ãã£ä»ããå¿ èŠãããã埩å·ãéã®æé ãå¿ èŠã§ããããçµæ§ãªã³ã¹ããçºçããŸãããµã€ãºãå¿ èŠä»¥äžã«å€§ãããªããŸãã
éã«åŸæ¥ã®ïŒã€ã®ãã¹ã¯ãŒãïŒéµïŒã§æå·åããã³åŸ©å·ã§ããæå·æ¹åŒããå ±é鵿å·ããšåŒã³ãŸããæ±ºããŠãå ±é鵿å·ãããªã¯ã³ã³ãšèšãããã§ã¯ãããŸããã
ãå ±é鵿å·ãã¯åŒ·ãã¢ã«ãŽãªãºã ã§ãåŠçé床ãéãããå ¬ééµã»ç§å¯éµæå·ããšæ¯ã¹ããŒã¿ãµã€ãºãå°ãããšããç¹åŸŽããããŸããçŸåšã§ã¯ã倧ããªãã¡ã€ã«ã®åŸ©å·ãã埩å·ã«éåºŠãæ±ããããå Žåã¯ãå ±é鵿å·ãã§æå·åãããã®å ±ééµããå ¬ééµã»ç§å¯éµæå·ã§ãããšãããŠããããããã¯ããäºããçžæã®å ¬ééµãšèªèº«ã®ç§å¯éµããçæããããšãããã€ããªãããªææ³ãå€ããšãããŸãã
æå·ã®è©±ãèªäœã¯ããã®èšäºã®ã¹ã³ãŒãïŒç¯å²ïŒããå€ãããããèå³ãæãããæ¹ã¯ä»¥äžã®èšäºãå匷ã«ãªããŸãã
ããŠããã®ããã·ã¥é¢æ°ã®ãéå¯éããªç¹åŸŽã¯ãäžè¬çã«ããã¹ã¯ãŒãã®ä¿åããªã©ã«äœ¿ãããŸãã
ããã¹ã¯ãŒãã®ç®¡çãã§ãçãéãéã«ããã¹ã¯ãŒããã©ããã£ãŠä¿åããããã®èè€ããããŸãã
ãŠãŒã¶ãŒã®ãã¹ã¯ãŒããçã§ä¿åããïŒãã®ãŸãŸä¿åããïŒã®ã¯ãã£ãŠã®ã»ããæå·åããã«ããŠãç§å¯éµãæŒæŽ©ãããå šãŠã®ãã¹ã¯ãŒããããã£ãŠããŸãããå ãåããããŸããããŸããåã ã®ãã¹ã¯ãŒãã«å¯ŸããŠç§å¯éµãäœæããŠããç§å¯éµã® DB ãæŒæŽ©ãããåãããšã§ãã
ãããã管çåŽã§æ±ããããã®ã¯ããŠãŒã¶ãŒãäºåã«æ±ºãããã¹ã¯ãŒãããšããã°ã€ã³ã§å ¥åããããã¹ã¯ãŒãããåãã§ãããã®ç¢ºèªã ãã§ãã
ããã¹ã¯ãŒãã¯ãµãŒããŒã«ä¿åããŠãããããªãããã§ãããã¹ã¯ãŒããç»é²ãããã®ãšåãã確èªãããããšãããèŠããããªããã©çããããããã«ãªãããæèšãã³ã¿ãããªã¯ã¬ãããããã·ã¥é¢æ°ã¯å®çŸããŸãã
å ·äœçã«ã¯ããã¹ã¯ãŒããããã·ã¥åããŠä¿åãããããšã§å¯èœã§ãã
ãã¹ã¯ãŒããæ£ãããã®ç¢ºèªã¯ããã·ã¥å€ãæ¯èŒããã°è¯ãããããã·ã¥å€ãæµåºãããšããŠãå
ã®ãã¹ã¯ãŒãã¯ããããªããã ãã§ãªãã管çè
ããå
ã®ãã¹ã¯ãŒãã¯ããããªãããšãã£ãã¡ãªãããããããã§ãããã¹ã¯ãŒãæµåºäºä»¶ããããšãèªåãã¡ã§ãããããªãç¶æ
ã§ä¿åãããŠããããäºã
ãã®ãããªãšã³ã³ãŒãïŒç¹å®ã®ã«ãŒã«ã«åŸã£ãŠå€æïŒããå€ã§ãããšãããä»çµã¿ãã€ãŸããªãªãžãã«ãé èœãããŸãŸã®ïŒãã³ãŒãããå¿
èŠã®ãªãïŒç¶æ
ã§ã確èªã®ãããšããããä»çµã¿ããäžæ¹åæå·ããšåŒãã ãããŸãããããããããŸã§ãããã·ã¥å€ããæå·
ããããåçŽã«ããã·ã¥åãããããšãã£ãŠå®å¿ã¯ã§ããŸããã
ãŸããããã·ã¥é¢æ°ã®ã¢ã«ãŽãªãºã ã« CRC ã®ãããªãã§ãã¯ãµã çã¢ã«ãŽãªãºã ã䜿ã£ãŠããŸããšãç°¡åã«è¡çªããïŒç°ãªããã¹ã¯ãŒããªã®ã«åãããã·ã¥å€ã«ãªããããïŒã ãã§ãªãããããšè¡çªãããŠæ¹ç«ããæ»æã«ãŸã£ããèæ§ããããŸããã
ãã®ãããåŸè¿°ãã saltïŒå¡©ïŒã䜿ã£ããã¯ããã¯ã圹ã«ç«ã¡ãŸãããããããCRC ã checksum ã¯æ¹ç«èæ§ããªã以åã«ãããããçšéãéããŸãã
次ã«ãã鳩ã®å·£åçããšããã鳩ã®å·£ç®±ãé³©ã®æ°ããå°ãªãå Žåã¯ãå¿ ã 1 ã€ä»¥äžã®å·£ç®±ã§è¡çªãã鳩ãããããšããåçããããŸããæ€ ååãã²ãŒã çãªãã®ã§ãã
ã€ãŸããããã·ã¥å€ã®ãããé·ãçããã»ã©ãåãåçã§è¡çªãããããªããŸãã
ã§ã¯ãæå·åŠçããã·ã¥é¢æ°ãªã©ãããã·ã¥å€ã®ãããé·ãé·ããã°å®å¿ãããšèšããšãå®å¿ã§ããŸããã
- ãèªçæ¥ã®ãã©ããã¯ã¹ããšåŒã°ããããæå€ã«è¡çªããããšãããžã¬ã³ãã®åé¡ã
- æå·åŠçã¢ã«ãŽãªãºã ã§ãã£ãŠã
MD5ãSHA-1ã®ããã«ãåççã«è¡çªãããæ¹æ³ãèŠã€ãã£ãŠããã¢ã«ãŽãªãºã ããããã
å®ã¯ãäžèšä»¥äžã®åé¡ããããŸãã
ãåŒæ°ãåãå Žåã¯æ»ãå€ãåãããšãããããïŒã€ã®ããã·ã¥é¢æ°ã®ç¹åŸŽã«ããæµåºããããŒã¿ãããã·ã¥åãããŠããŠãæå³ããªããªãããšãããããã§ãã
å ·äœçã«ã¯ãå¥éãã¹ã¯ãŒãã»ãªã¹ããªã©ããã£ãå Žåã§ãã
ãªããªããã¹ã¯ãŒãã»ãªã¹ããããã¹ã¯ãŒããããã·ã¥åããŠåãå€ãæ¢ãã°ããããã§ããã€ãŸããèŸæžæ»æã䜿ããããšããããšã«ããªããŸãã
äŸãã° Folding@home ã§æåãªãããŒã¯ã¬ãŒå€§åŠã® BOINC ã䜿ã£ã忣ã³ã³ãã¥ãŒãã£ã³ã°ã®ãããžã§ã¯ãã® 1 ã€ã« "Free Rainbow Tables" ãšãããã®ããããŸãã
ããã¯ã泚æåèµ·ã®ããã«äœæããããããã·ã¥é¢æ°ã®éåŒããå¯èœãšãããæ°ãã©ãã€ãèŠæš¡ã®å·šå€§ãªèŸæžïŒã¬ã€ã³ããŒããŒãã«ïŒã§ãã
ä»ã«ããéå»ã«æµåºããã¡ãŒã«ã¢ãã¬ã¹ãšãã¹ã¯ãŒãã32 åä»¶ãã¢ãŒã«ã€ããã COMB ããŒã¿ãªã©ãååšãããã®åŸã®æµåºãããã®ãå«ãããš 150 å件以äžã®ããŒã¿ãæ€çŽ¢å¯èœãšãªã£ãŠããŸããã€ãŸããå šäžçã®äººå£ïŒ80åïŒã®çŽ 2 åè¿ãã®ãã¹ã¯ãŒããã衚ã®äžçãã§ãã£ãŠã確èªã§ããããšã«ãªããŸãã
äŸãã°ããã®èšäºã®ãµã³ãã«ã«åºãŠãã 34902903de8d4fee8e6afe868982f0ddïŒbeef ã MD5 ã§ããã·ã¥åãããã®ïŒã§ããçè
ã®ã·ã§ãããã·ã³ã§ã 10 ç§ä»¥å
ã§ç·åœããè§£æã§ããŠããŸããŸãã
HashCat ã䜿ã£ãŠ34902903de8d4fee8e6afe868982f0ddãè§£æãã
HashCat ã¯ãªãŒãã³ãœãŒã¹ã®ãã¹ã¯ãŒãã»ãªã«ããªãŒã»ããŒã«ã§ããèŸæžãã¡ã€ã«ã䜿ã£ãè§£æã ãã§ãªããç·åœããã«ããè§£ææ©èœãæã£ãŠããŸãã
äžéšã§ 34902903de8d4fee8e6afe868982f0dd:beef ãšè§£æã§ããŠããããšã«æ³šç®ãã ããã
$ # ç·åœããïŒ-a 3)ã§ MD5(-m 0)ãè§£æãã
$ time hashcat -a 3 -m 0 "34902903de8d4fee8e6afe868982f0dd"
hashcat (v6.2.6) starting
METAL API (Metal 263.9)
=======================
* Device #1: Intel(R) Iris(TM) Graphics 6100, skipped
OpenCL API (OpenCL 1.2 (Aug 17 2023 05:46:30)) - Platform #1 [Apple]
====================================================================
* Device #2: Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz, 4064/8192 MB (1024 MB allocatable), 4MCU
* Device #3: Intel(R) Iris(TM) Graphics 6100, skipped
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Optimizers applied:
* Zero-Byte
* Early-Skip
* Not-Salted
* Not-Iterated
* Single-Hash
* Single-Salt
* Brute-Force
* Raw-Hash
ATTENTION! Pure (unoptimized) backend kernels selected.
Pure kernels can crack longer passwords, but drastically reduce performance.
If you want to switch to optimized kernels, append -O to your commandline.
See the above message to find out about the exact limits.
Watchdog: Temperature abort trigger set to 100c
Host memory required for this attack: 1 MB
The wordlist or mask that you are using is too small.
This means that hashcat cannot use the full parallel power of your device(s).
Unless you supply more work, your cracking speed will drop.
For tips on supplying more work, see: https://hashcat.net/faq/morework
Approaching final keyspace - workload adjusted.
Session..........: hashcat
Status...........: Exhausted
Hash.Mode........: 0 (MD5)
Hash.Target......: 34902903de8d4fee8e6afe868982f0dd
Time.Started.....: Sun Mar 24 15:29:11 2024 (0 secs)
Time.Estimated...: Sun Mar 24 15:29:11 2024 (0 secs)
Kernel.Feature...: Pure Kernel
Guess.Mask.......: ?1 [1]
Guess.Charset....: -1 ?l?d?u, -2 ?l?d, -3 ?l?d*!$@_, -4 Undefined
Guess.Queue......: 1/15 (6.67%)
Speed.#2.........: 313.1 kH/s (0.01ms) @ Accel:512 Loops:62 Thr:1 Vec:4
Recovered........: 0/1 (0.00%) Digests (total), 0/1 (0.00%) Digests (new)
Progress.........: 62/62 (100.00%)
Rejected.........: 0/62 (0.00%)
Restore.Point....: 1/1 (100.00%)
Restore.Sub.#2...: Salt:0 Amplifier:0-62 Iteration:0-62
Candidate.Engine.: Device Generator
Candidates.#2....: s -> X
Hardware.Mon.SMC.: Fan0: 42%
Hardware.Mon.#2..: Temp: 46c
**snip**
34902903de8d4fee8e6afe868982f0dd:beef
**snip**
Started: Sun Mar 24 15:29:04 2024
Stopped: Sun Mar 24 15:29:13 2024
real 0m9.168s
user 0m1.211s
sys 0m0.576s
ããããããåçŽã«ãããã·ã¥åããã ããã§ã¯å®å¿ã§ããªããã®ãªã®ã§ãã
ããã·ã¥ããã ãã§ã¯å³æ°ãªãã®ã§å¡©ãè¶³ãã
ããŠãããã·ã¥é¢æ°ãæå·é¢æ°ãè§Šã£ãŠãããšãsaltãïŒãœã«ãããµã«ãðïŒãšããèšèãåºãŠããŸããæ¥æ¬èªã§ãå¡©ãã®ããšã§ãããäžè¬çã«ããœã«ãããšèšèŒãããŸãã
ã³ã³ãã¥ãŒã¿ãŒã®äžçã§ salt ã¯ãåã
ã®ããŒã¿ã«å ããã©ã³ãã ãªæ°å€ãæååã®ããšãæããŸããå
ã®äŸã§èšãã° beef ã«å ãã salt=1 ã§ãã
æçã§ãããå¡©å æžãã®ããã«ãåãå
·æã§ãå¡©ã®å æžïŒã€ã§å³ãå€ãããããæ¯å調æŽãå¿
èŠã§å æžãç§äŒ
ãããŸã§ã®äŸã®ããã«ãsalt ã®å€ã¯ãããŒã¿ã®åããããã¯ãããŒã¿ã®åŸããã«ã€ãªããŠããã·ã¥åããæ¹æ³ã«ãã䜿ãããŸãã
$a = hash( 'md5', $data . $salt); // åŸããå¡©ãè¶³ã
$b = hash( 'md5', $salt . $data); // å
ã«å¡©ãè¶³ã
data='beef'
salt='1'
# å
ã«å¡©ãè¶³ãïŒ"1beef"ïŒ
hash_prepend_salt=$(echo -n "${salt}${data}" | openssl md5)
echo $hash_prepend_salt; # b14ab03be97e0b8deb2fa930cfdd4f4a
# åŸããå¡©ãè¶³ãïŒ"beef1"ïŒ
hash_append_salt=$(echo -n "${data}${salt}" | openssl md5)
echo $hash_append_salt; # 30017279d6a5bac241e764eeed261dd8
äžèšã®ããã«ãsalt ãå ãããšããã·ã¥å€ãå€ããã®ã¯åœç¶ãšããŠãååŸã® salt ãå
¥ãæ¿ããã ãã§ãããã·ã¥çµæã倧ããç°ãªããŸãã
ã§ã¯ãåã«è¶³ãããåŸãã«è¶³ãããã©ã¡ãã®ãã¿ãŒã³ãè¯ãã®ã§ãããã
å¡©ã¯åŸããè¶³ãã
æçã®å Žåãå³ãèŠãŠåŸããå¡©ãè¶³ãã®ãåºæ¬ã§ããããã«ãåçŽã« salt ãããŒã¿ã«è¶³ãå ŽåããåŸããè¶³ãããã«ããŸãããã
$a = hash( 'md5', $data . $salt); // ð ãã¿ãŒ
$b = hash( 'md5', $salt . $data); // ð åé¡ãã
ããã¯ãLength extension attackïŒãäŒžé·æ»æãïŒãšåŒã°ããããã·ã¥å€ã®è¡çªæ»æã«åŒ±ãããã§ãã
ç¹ã«ãMD5, SHA-1 ã SHA-2 ãªã©ã® MerkleâDamgÃ¥rd ãšåŒã°ããæ§é ã䜿ãããã·ã¥é¢æ°ã®å Žåã«ã€ããŠãŸãããŸããçºé³ã¯ãããŒã¯ã«ã»ãã³ã¬ãŒããã®ããã§ããããŒããŒã»ããããã®ãããªååã§ããããããã¯ã»ãã§ãŒã³ã«èå³ã®ããæ¹ã¯ããã®ååãš salt ãèŠããŠãããŠãã ãããåŸããåºãŠããŸãã
ããŠããã®ãäŒžé·æ»æãæ»æãæããã«çã説æãããšä»¥äžã®éãã«ãªããšæããŸãã
Y = hash( salt . X )ã®XãšYãããã£ãŠããå Žåãsaltã®é·ãããããã°saltãéç®ã§ããªããŠãY = hash( salt . X . Z)ã®èšç®ãã§ãããïŒ.ã¯æååã®çµååïŒãã®ãã
Zã«è¯ãããã¬æååãå ¥ããŠYã®å€ãåãã«ããããšãã§ããå¯èœæ§ãããã
- ãœã«ããšããã·ã¥é¢æ°ã ãã§ãã¹ã¯ãŒããããã·ã¥åããã®ã埮åŠãªçç± @ Qiita
- Length Extension Attack ããŒã« "Hash Extender" @ GitHub
-
saltãsecretãXãdataãYãsignatureãZãappendã«çœ®ãæã㊠README ãã芧ãã ããã - ãã®ããŒã«ã®äœè
ã®ããã°ã«è©³ããèšç®æ¹æ³ãèŒã£ãŠããŸãã
Everything you need to know about hash length extension attacks @ SkullSecurity
-
éã« Y = hash( X . salt) ãšåŸã«ä»ãå ããå Žåã¯ããã®æ»æãåé¿ã§ããŸãããå³ä»ãã¯åŸããè¡ããïŒsalt ãå ããã®ã¯åŸïŒãšèŠããŠãããŸãããã
å¡©ã ãã§ãªãè¡æ€ãè¶³ãã
ãã®ãsaltãïŒå¡©ïŒã¯åºæ¬çã«åã
ã®ããŒã¿ã«å ããã®ã§ãããDB ã®å Žåãå
šäœã«å ãããpepperãïŒè¡æ€ïŒãšåŒã°ããå€ããããŸãã
- ãœã«ãïŒæå·åïŒ@ Wikipedia æ¥æ¬èª
- ããããŒïŒæå·åïŒ@ Wikipedia è±èª
äŸãã°ãäžèšã¯ãã¬ãŒã³ãªïŒå å·¥ãæãå ããŠããªãçŽ user1 ãš user2 ã®ãã¹ã¯ãŒããåãã§ãã
| ãŠãŒã¶å | ãã¹ã¯ãŒã |
|---|---|
| user1 | passw0rdA |
| user2 | passw0rdA |
äžèšã ãšæµåºæã«ãã¬ãã¬ãªã®ã§ã次ã®ããã«ãã¹ã¯ãŒãã«å¡©ã»è¡æ€ããŠå³ä»ãããŸãã
$passwd_hashed = md5($passwd . $salt . $pepper);
ããã§ã¯å¯èªæ§ã®ããã«è匱㪠MD5 ã䜿ããŸããããã¹ã¯ãŒãä¿åã« MD5 ã䜿ãããããšã¯ãããŸããã
DB ã®ä¿åã§èãããšã宿°ã« pepper='pepperA' ãšèšå®ããŠãããããŒãã«ã¯ä»¥äžã®ãããªã€ã¡ãŒãžã«ãªããŸãã
| ãŠãŒã¶å | ãã¹ã¯ãŒã |
|---|---|
| user1 | 7915e17989dcbb1d2132c1d207ef9e1d |
| user2 | 5ee508cb664f91000826933e626cd5df |
| ãŠãŒã¶å | ãœã«ã |
|---|---|
| user1 | saltA |
| user2 | saltB |
DB ãã¡ã€ã«èªäœãæµåºãããããŒãã«ããããŠãåãããšã§ããããããã¹ã¯ãŒããšãœã«ããåãããŒãã«ã«æ ŒçŽããå ŽåããããŸããã©ãã«æ ŒçŽãããã¯éçšã®èãæ¹ãã ãã ãšæããŸãã
ããªãã°ããœã«ãå€ãå¥ DB ã«ä¿åããŠãªã¹ã¯åæ£ããªããããšèšã£ããæ²Œã«ããã£ãã®ã§ããã°ã以äžã®èšäºãäžèªããããšããªã¹ã¹ã¡ããŸãã
ããŠãå
šäœã«è¡æ€ãå ãã
pepper ã®å®æ°ãæµåºããŠããªããã°ãæµåºãã DB ã® salt å€ããã ãã§ã¯ä¿åãããããã·ã¥å€ãç®åºããã®ã¯å€§å€ãªã®ã§ã2 ã€ç®ã®ãããã¯salt å€ã¯ãããããšã«ãªãã®ã§ãpepper å€ã®ç®åºã¯æéã®åé¡ãšãªããŸãã
ãã®ãããªäºæ
ã®å ŽåããŸãã¯ããŠãŒã¶ãŒå
šå¡ã«ãã¹ã¯ãŒããåèšå®ãããŠãããããšããæåªå
ã§ããããã§ãpepper å€ãå€ããã°ããã¹ãŠã®ä¿åå€ãšèšç®ãåããªããªãã®ã§å
šäœãããã¯ã§ããŸãã
ãã®è¡æ€ãå¹ãããæ¹æ³ã¯ãã¢ã€ãã¢æ¬¡ç¬¬ã§è²ã ãšäœ¿ããŸã
ãã°ã€ã³æã® cookie ã® ID ãªã©ã§ã䜿ããããã¯ããã¯ã§ãäžå¯©ãªãã°ã€ã³ãè€æ°ãŠãŒã¶ãŒã§æ€ç¥ããå Žåã«ãpepper å€ãå€ããããšã§ãå
šå¡ã匷å¶çã«åãã°ã€ã³ãããããšãã§ããŸãã
ä»ã«ãã宿çã« pepper å€ãå€ããŠããã®åŸãæŽæ°ããã»ããªããã§ã¢ã¯ãã£ãã»ãŠãŒã¶ãŒã確èªããããã¢ããªã«èå³ã®ãªããŠãŒã¶ãŒããµãã
ãã¡ãããã¹ããã® OS ã®ã¢ããããŒããã»ãã·ã§ã³ã®æéåãã«ãããã®ããããŸããããæŽæ°ããšããåã«ãããŠãããããããŒã¯ãªãã¿ãŒã³ã«ãå©çšãããå¯èœæ§ããããšããããšã§ãã
ãŸããå®éã« salt ã pepper å€ã䜿ãå Žåã¯ä»¥äžã®ããã«ãããè€éã«ã·ã§ã€ã¯ããŸãã
- "
saltA" ãªã©ã®åçŽãªæååã§ãªãã©ã³ãã ãªæ°å€ãæååã䜿ã - ã¢ã«ãŽãªãºã ã
sha256ãsha512ãªã©ã®ããè€éãªã¢ã«ãŽãªãºã ã䜿ã -
hash('sha256', hash('sha256', $value))ãšäºéã»äžéã«ããã·ã¥åããããããïŒæã«æ°äžåïŒ
ð  3 çªç®ã®ã«ãŒãã§ãããKey stretchingãïŒã¹ãã¬ããã³ã°ïŒãšåŒã°ãããç·åœããæ»æå¯Ÿçãã® 1 ã€ã§ãã
äžèšã§èª¬æãããšã1 åã®åŠçã«æéãããããã察çãã§ãã
äž»ã«ããŒã«ã«ïŒæµåºå ïŒã§ã®ãç·åœããæ»æãã®å¯Ÿçã§ã1 åããã·ã¥å€ãç®åºããã®ã«æéããããããããšã§ãæçµå€ãèŠã€ãããŸã§ã®æéã䌞ã°ãïŒã¹ãã¬ããããïŒãšèšãææ³ã§ãã
äŸãã°ãå¹³åã㊠1 ç§ããããããã«äœåºŠãïŒæã«æ°äžåãïŒããã·ã¥é¢æ°ã«éããæçµçãªããã·ã¥å€ãä¿åããŠäœ¿ããŸãã
ãã°ã€ã³ãªã©ã®å Žåãããã«ãã 1 åã®ãã°ã€ã³ã« 1 ç§ããããã®ã®ãç·åœããæ»ææã«ã¯ 1 ç§ã« 1 ã€ãã確èªã§ããªããšããããšã§ããããŸããããã«ãããæ»æã®åæ°ãåçã«æžãããŸãã
ä»ã«ãããµãŒãåŽã§è¡ãã¹ãã¬ããã³ã°ã«ãé å»¶ãããããŸãã
äŸãã°ããªã¯ãšã¹ããåããŠããã·ã¥å€ã確èªããéã®ã¿ã€ãã³ã°ã«ããããš sleep ãå
¥ããŠé
å»¶ãããããªãã©ã€åæ°ã®å¶éããšçµã¿åãããããšã§ 1 åã®æ»æã«æéããããããããšã§ç·åœããæ»æããèŸããããŸãã
ãã°ã€ã³ãªã©ã§ãæåãããšãµã¯ããšå ¥ããã®ã«ãééãããšãDB ãç·ãªãããŠãã®ããªïŒãçã«åå¿ãé ããªãã®ãæããããšããããšæããŸãããã¢ã¬ãã¹ãã¬ããã³ã°ã§ãã
ãã®ãã¹ãã¬ããã³ã°ãã¯ãåŸè¿°ãããããã¯ã»ãã§ãŒã³ã«ããnonce æ¢çŽ¢ããšããŠæŽ»çšãããŠããŸãã
ãã¹ã¯ãŒãã»ããã·ã¥ãšã¯
ããŠããããŸã§ã¯ãã¹ã¯ãŒãã®ä¿åã«é¢ãã話ãã¡ã€ã³ã§ããã
ããããæ¬èšäºã¯ã»ãã¥ãªãã£ã®ããã®èšäºã§ã¯ãããŸããããããŸã§ãããã·ã¥é¢æ°ã®åºç€ç¥èãšã掻çšãã«é¢ããèšäºã§ãïŒãçµæ§ãã»ãã¥ãªãã£ïŒæå·ïŒã®è©±ããããšãããªãããããšæããããããŸããããæã ã®äžçã§ãããHDD ãš SSD ã®èª¬æãšéããã説æããŠããçšåºŠã®å 容ãããã§ãïŒã
ãå®å šãªãã¹ã¯ãŒãä¿åãã«ããã·ã¥å€ã䜿ãããã®ã§ããã°ããã¹ã¯ãŒã管çå°çšã®é¢æ°ããã¬ãŒã ã¯ãŒã¯ãåã ã®ããã°ã©ã èšèªã«ã¯æ°å€ããããŸããäžè¬çã«ããã·ã¥å€ããã¹ã¯ãŒã管çã«ç¹åãããã®ãããã¹ã¯ãŒãã»ããã·ã¥ããšåŒã³ãŸãã
èªåã§å®è£
ããããã¯ãããããå©çšããæ¹ãæ¥œpassword_hash() ãšããããŸããŸ
å ã®ãã¹ãã¬ããã³ã°ãã®ããã«ããã¹ã¯ãŒãã»ããã·ã¥ãã¯èšç®ã®ãã¥ããïŒé¢åãããïŒã«éç¹ããããŠããã®ã§ãé床ã®éããšåŒ·åºŠãéèŠããããããã·ã¥é¢æ°ããšã¯ç®çãéããŸãã
2021/03/01 çŸåšãæåŒ·ã®ãã¹ã¯ãŒãã»ããã·ã¥ã¯ Argon2 ãšæãããŸãã2013 幎ãã 2015 幎ã«ãããŠè¡ããã PCH ãšãããã¹ã¯ãŒãã»ããã·ã¥ã®ç«¶æäŒã§åªåããã®ã Argon2 ã ããã§ãã
Argon2 ã«ã¯ãArgon2i ãš Argon2d ã®å€§ãã 2 ã€ãããŸãã
Argon2i ã¯ãåŠçæéãããŒãã®é»å§ãªã©ç©ççã«èгå¯ããŠæ
å ±ãçããµã€ããã£ã³ãã«æ»æã«èæ§ããããArgon2d ã¯ãGPU æ»æïŒåçŽãªèšç®ã®äžŠååŠçïŒã«åŒ·ãèæ§ãããã¢ã«ãŽãªãºã ã§ãããããŠãäž¡æ¹ãåããã¢ã«ãŽãªãºã ã Argon2id ã§ãã
äŸãã° PHP 7.3 以éã§ã¯äž¡æ¹ã«å¯Ÿå¿ãã PASSWORD_ARGON2ID ã䜿ããŸããïŒãªã³ã©ã€ã³ã§åäœãã¿ã @ paiza.IOïŒ
ãŸããGo ã®å Žå㯠golang.org/x/crypto/argon2 ã®å ¬åŒããã±ãŒãžã䜿ããŸãããããã䜿ãã¥ããã®ã§ãæåå³åã§ããã䜿ããããããããã±ãŒãž "go-argonize" ãçšæããŸãããã©ã®ããã«äœ¿ãã®ãã®åèã«ããŠã¿ãŠãã ããã
ã»ãã¥ãªãã£ã®èšäºã§ã¯ãªããšã¯èšããã»ãã¥ãªãã£ãå¿é ã§ããã·ã¥é¢æ°ãååŒ·ã«æ¥ããšããæ¹ã¯ããã® Web ã»ãã¥ãªãã£ã®ãã€ãã«ãšãèšããã埳䞞æ¬ãã§æåãªåŸ³äžžå çã® Youtube åç»ãã£ã³ãã«ãå ¥ãå£ãšããïŒãã©ããŒããïŒããšããå§ãããããŸãããã®äžã§ãã€ãã«ã®ïŒåãããã¯æã£ãŠãããšè¯ããšæããŸãã
ã¶ã£ã¡ããããããªãžã£ã³ã¯ã§åºæ¬çãªå 容ã®èšäºãèªããããå çã®æ¬ã e ã©ãŒãã³ã°ã®ã³ãŒã¹ãåè¬ãããæ¹ãå®è£ ã®åœ¹ã«ç«ã¡ãŸãã
- 埳䞞浩ã®ãŠã§ãã»ãã¥ãªãã£è¬åº§ @ Youtube
- å çã® e-ã©ãŒãã³ã°ãµãŒãã¹ @ Security Campus [説æåç»]
- åŸ³äžžæ¬ ãäœç³»çã«åŠã¶ å®å
šãªWebã¢ããªã±ãŒã·ã§ã³ã®äœãæ¹ ç¬¬2çã
ãè匱æ§ãçãŸããåçãšå¯Ÿçã®å®è·µã- ISBN-10: 4797393165
- https://amazon.co.jp/dp/4797393165/ @ Amazon
- ãã 1 幎ã®ã埳䞞æ¬ãã«é¢ãã Qiita èšäº @ Google
ãããã䜿ããªã SHA-3
ãã¹ã¯ãŒã以å€ã®ããŒã¿ã®ããã·ã¥åã«åŒ·ãã¢ã«ãŽãªãºã ãæ¬²ãããšæ©ãã ãããšããããã¯ãSHA3-512ããéžã¶ãšããã§ããããæ¬¡ç¹ã§ãSHA3-256 ã§ããããOS ãããã°ã©ã èšèªéã§äºææ§ãé«ãïŒæ±çšåºŠãé«ãïŒäžã§ã¯ãäžçªåŒ·ãããã·ã¥ã»ã¢ã«ãŽãªãºã ã ããã§ããïŒ2020/10 çŸåšïŒ
ã¶ã£ã¡ãã SHA-2 ã® SHA-256 ã SHA-512 ã§ãå®çšãšããŠã¯çŸç¶ååã§ãã
ããããSHA-2 㯠20 幎以äžåã®ã¢ã«ãŽãªãºã ã§ããããšãè匱æ§ïŒåççãªè¡çªæ¹æ³ïŒãçºèŠãããŠãã SHA-1 ã®èŠªæã§ããããšãä»åŸã®æŒç®åã®åäžã«ãã SHA-2 ãæéã®åé¡ã§ããããšãããç§»è¡ãæšå¥šãããŠããããšãç¥ãå¿ èŠããããŸãã
ããããå®è£ ããã®ã§ããã° SHA-1 ã SHA-2 ãšã¯ãŸã£ããéãæŠå¿µã®ã¢ã«ãŽãªãºã ã§ SHA-2 ã®åŸç¶ãšæ£åŒã«å¶å®ããã SHA-3 ã®å©çšãæ€èšãã䟡å€ã¯ãããšæããŸãã
ãããŸã§ã« SHA-1ãSHA-2ãSHA-3 ãšãã£ããSHA ãªããšããããã¡ããã¡ããåºãŠããŸãããSHAïŒã·ã£ãŒïŒã¯ "Secure Hash Algorithm" ã®ç¥ã§ NIST ãäœæã»å¶å®ã»æšå¥šããããã·ã¥ã»ã¢ã«ãŽãªãºã å
šè¬ãæããŸãã
äŸãã° SHA-2 㯠SHA-224ãSHA-256ãSHA-384ãSHA-512 ã®ç·ç§°ã§ãåã
ããã·ã¥å€ã®é·ãïŒãããé·ïŒã®ããªãšãŒã·ã§ã³ã衚ããŠãããMerkleâDamgÃ¥rd æ§é ãããŒã¹ã«äœæããããã®ã§ãã
åæ§ã« SHA-3 ãããããé·ããšã«ããªãšãŒã·ã§ã³ïŒSHA3-256 ãªã©ïŒãããã Keccak ã¢ã«ãŽãªãºã ãããŒã¹ã«äœæããããã®ã®ç·ç§°ã§ããSHA-3 ã«ã¯ãä»»æã®é·ãã®ããã·ã¥å€ãåŸããã SHAKE128 ãš SHAKE256 ãããã128 ã 256 ã¯ããã·ã¥å€ã®é·ãã§ã¯ãªãããã®å
éšåŒ·åºŠã衚ããŠããŸãã
ã¡ãªã¿ã« NIST ã¯ãç±³åœã®åœå
æšæºèŠæ Œã®å¶å®å£äœã®ããšã§ããäžçæšæºèŠæ Œã® ISOïŒãã®ãã¡æ¥æ¬èªã«èš³ããé©çšãããã®ã JISïŒãã補åããµãŒãã¹ã®å質ãå®å
šæ§ã®åäžãå³ãããã®èŠæ Œãã§ããã®ã«å¯ŸããNIST ã®èŠæ Œã¯ïŒå·æŠæä»£ã«éèŠèŠãããïŒãã»ãã¥ãªãã£ãšåœåå®å
šä¿éããããã匷ãæèãããŠããŸãã
ãã®ããã以åãŸã§ã¯ç±³åœæ¿åºã®å®å
šä¿éå±ïŒNSAïŒãäœæããã¢ã«ãŽãªãºã ãå¶å®ããŠããŸãããããããè¿å¹Žã¯ãäžçäžã®æå·åŠã®ç ç©¶è
ããå®å
šæ§ãé«ãè©äŸ¡ãããæå·æè¡ããéžå®ãããããã«ãªã£ããããNIST å¶å®ã®æå·ã¢ã«ãŽãªãºã ãããã·ã¥ã»ã¢ã«ãŽãªãºã ã¯ãã€ã³ã¿ãŒãããã®äºå®äžã®æšæºïŒããã¡ã¯ãã»ã¹ã¿ã³ããŒãïŒãšããŠäœ¿ãããŠããŸããã€ãŸããRSAãAESãSHA ãšãã£ã NIST å¶å®ã®ã¢ã«ãŽãªãºã ã¯èª°ã§ãç¥ã£ãŠããã䜿ãããšããç¶æ³ã§ãããšããããšã§ãã
ãšã¯èšãã匷ãã¢ã«ãŽãªãºã ã»ã©è€éããå¢ãããåŠçé床ãã¬ã¹ãã³ã¹ã®åé¡ãåºãŠæ¥ãŸãã
ã©ã®çšåºŠè€éåãããã®ããéçšã®èãæ¹ãã ãã«ãªããšæããŸããäžæŠåŒ·ããã®ã§çµãã§ãããäºç®ã»éçšã³ã¹ãïŒèšç®ã³ã¹ãïŒã»UX ãšçžè«ããªãããæž¬å®ããªããäœãæ¹ãžæ€èšããŠãã ãããïŒãæ¶æž¬ãããªã枬å®ãããã§ãïŒ
ãããã«ããŠããåŒæ°ã« $salt ã $pepper ããã³ããã·ã¥åã®ã«ãŒãåæ°ãšããã絶察å
¬éããªãèŠçŽ å ããããšã§äºæž¬ãé£ãããããŠããã®ã§ãã
ãã¡ãã salt å€ã pepper å€ãæµåºããŠããŸããšæå³ããããŸãããã·ãªã·ãªã®ããŒã§ããã€ãŸããç§å¯éµãšåããããæ±ãã«ã¯æ°ãã€ããªããšãããªãã®ã§ããããã·ã¥åããŠãå®å¿ã§ããªãããšããããšæããŸãã
å¡©ã«å·¥å€«ãããŠç§å¯ã®å ±éã¬ã·ããäœããïŒç°¡æå ±ééµã®äœãæ¹ïŒ
ããŠãå
ã®ããŒã¿ã«ç§äŒsalt å€ãå ããŠããã·ã¥åããããšã§ãå
ã®ããŒã¿ã®ããã·ã¥å€ãé èœ
ããã§ãsalt å€ããå€éšã«å
¬éããŠã¯ãããªãå€ããªããã€ãå
ã®å€ãåŒãåºãã»ç¹å®ããããã«äœ¿ãããå€ããšãããšãsalt ã¯ç§å¯éµ
ãã® salt å€ã䜿ã£ãä»çµã¿ãããã«å·¥å€«ãããšã2 è
éã§ãäºãã®ç§äŒsalt å€ããå
±éã® salt å€ãäœæããããšãã§ããŸãã
ã€ãŸããä¿ã«èšããå
±ééµãã®ãããªãã®ãããäºãã®ç§å¯éµ
泚æç¹ãšããŠããã®ãããªäœ¿ãæ¹ã®å€ã salt ãšã¯åŒã³ãŸãããããã§ã®ãã€ã³ãã¯ããäºãã®ç§äŒ
ããŠãåºæ¬çãªä»çµã¿ã§ãããæ°åŒã䜿ããšé ããã£ã³ãã³ãã¡ããã®ã§ãè²ããã£ã³ãã³ããããšäŸãããšçè§£ããããã£ãã§ãã
ãšèšãã®ããããŒã¿ã« salt å€ãå ããŠããã·ã¥é¢æ°ã§ãŽãã£æ··ãã«ãããšããã®ã¯ãå¥ã®èŠæ¹ããããšããšããè²ãã«ã俺æ§ã«ã©ãŒãã®çµµå
·ãæ··ãããããªãã®ãšãèšããŸãã
ããã§ãå ±ééµã®äœãæ¹ã®æµãããããŸãã¯è²ã䜿ã£ãæŠå¿µå³ã§å šäœãææ¡ããããšæããŸãã
äžå³ã«ããããå ±éè²ã㯠Alice ãš Bob ãäºåã«åæããŠããè²ããç§å¯è²ãã¯åã ãã©ã³ãã ã«éžãã è²ããšèããªããäžã®å³ãèŠãŠãã ããã
ããã§ã®ãã€ã³ãã¯ãç§å¯è²ã®äº€æãããŠããªããããšãšããè²ãæ··ããŠããã ããã§ãã
![]() |
|---|
| "DiffieâHellman key exchange" @ ããã£ãã£ãŒã»ãã«ãã³éµå ±æãã®è±èªç Wikipedia ããçè ã«ããæ¥æ¬èªèš³ |
è²ã§æŠå¿µãæãããšã¯èšããã³ãŒãã§æžããªããšçè§£ã§ããªãã¿ã€ããªã®ã§ãäžèšã Bash ã§åçŸããŠã¿ãŸããã
ããããåããã¥ããã§ããã"yellow" "red" "green" ã®æååã MD5 ã§æ°å€åããäžèšã®å³ã®éãè¶³ãç®ããŠããã ãã§ããAlice.sh ãš Bob.sh ããäºãã®ç§å¯è²ïŒxxxSecretColorïŒãåç
§ïŒåãåã£ãŠïŒããªãããšã«æ³šç®ããŠã¿ãŠãã ããã
- ãªã³ã©ã€ã³ã§åäœãèŠã @ paiza.IO
éã人ã¯ãããŒãã§ããäºãã«åããå ±éè²ããæã£ãŠãããã ããããçžæããåãåã£ãæ··åè² - å ±éè²ããšåŒãç®ããã°çžæã®ç§å¯è²ãããã£ã¡ãããããããšæ°ã¥ãã§ãããã
ããèšãç§ã¯ãèªåã§ bash ã§å®è£
ããŠã¿ãŠåããŠæ°ã¥ããŸãããè¶³ãç®ã§ãªãæãç®ã§ãã£ãŠãåãã§ããå²ã£ã¡ããã°ããã®ã§ã
äžèšå³ã«ããè²äº€æã®ã³ã¡ã³ãã§ãæ··åè²ããå ã®è²ãåé¢ãããããšã¯å°é£ãªæ··åã®ä»æ¹ãšããããšãããŸãã
ã€ãŸãã2 ã€ã®å€ããŽãã§ãŽãã§ãšæ··ã㊠1 ã€ã®å€ãåºãããšããè²ãæ··ããããšè¡šçŸããŠããã®ã§ãããåçŽãªè¶³ãç®ãè¶³ãç®ã®é£ç¶ïŒæãç®ïŒã¯ãåé¢ãããããšãç°¡åãªæ··åã®ä»æ¹ããšããããšã«ãªããŸãã
ã§ã¯ãè²äº€æããå€ãèªåã®ç§å¯è²ã§ hash(<è²äº€æããçžæã®è²> + <èªåã®ç§å¯è²>) ã®ããã«ããã·ã¥ããã°è¯ãããšãããšãã¡ã§ãå¡©ãåã«è¶³ããã»åŸã«è¶³ããã§å€§ããå€ãã£ãŠããŸãããã§ãã
ããã§åç»å Žããã®ãå²ãç®ã®äœãããããmodïŒå°äœã%ïŒã§ãã
X := (A * B) % Y // X ããèŠããšãY ã¯äºæž¬ã§ããŠããA ãš B ã®çµã¿åããã¯è¬
ã€ãŸããå²ãç®ã®äœãããã¯ãå ã®çµã¿åãããåŸãããšã¯å°é£ããšããæ§è³ªã䜿ã£ãŠãå ã®è²ïŒå€ïŒã®çµã¿åããã«åé¢ãããããšã¯å°é£ããšããç¶æ³ãäœã£ãŠã¿ãŸãããã
ããã§ãã¢ãã¿ãããªè©±ãã§ãããa * b 㯠b * a ãšåãçµæã«ãªãããšããç®æ°ãæãåºããŠãã ããã
ãããŠãåæ§ã«äžèšã® 2 ã€ã¯åãçµæã«ãªããŸãã
(a3)2 = (a * a * a) * (a * a * a) = a3*2 = a6(a2)3 = (a * a) * (a * a) * (a * a) = a2*3 = a6
ããã¯æ°åŠçã«è¡šçŸãããš (ax)y = (ay)x = axy, x = 3, y = 2 ãšè¡šããŸããèœã¡çããŠèŠæ¯ã¹ãã°äœãŠããšãªãããšããçã衚çŸããŠããã ãã§ãã
ããŠããã® ax ãš ay ãäžèšã®è²ã®æŠå¿µå³ã§äº€æãããæ··åè²ãšããå Žåãa ãå
±éè²ãx ãš y ãåã
ã®ç§å¯è²ãšã§ãããã§ãã
ãããšãåã
ç®åºãããå
±éç§å¯è²ãïŒå
±éã®å€ axyïŒ ã¯ (ax)y ãš (ay)x ãšèšç®ã§ãããã§ãã
ããããããã§ã¯ïŒãã ã®æãç®ãªã®ã§ïŒäœããããããããŸããã
ããã§äž¡èŸºãåãå€ p ã§å²ã£ãäœããåºããŠã¿ãŸãã以äžã® 4ã€ã¯åãå€ã«ãªãã®ãããããã§ããããã
(ax)y % p = å ±éç§å¯è²(ay)x % p = å ±éç§å¯è²axy % p = å ±éç§å¯è²ayx % p = å ±éç§å¯è²
ããã§ãå ±éç§å¯è²ããæµåºããŠããax ããã㯠ay ã®ç®åºã¯é£ãããªããŸãã
ã€ãŸããa ãšãã¢ã«ãªãå€ p ãçšæãããã® 2 ã€ã®å€ãã»ããã§ãå
±éè²ãïŒäºåã«åæããŠããè²ïŒãšã§ãããã§ãã
ãã®èãæ¹ãã€ãŸããæãç®ã®é çªãå€ããŠãåãå€ã«ãªãããæãç®ã®çµæãåããªãããããããã«åãå€ã§å²ã£ãŠãäœãã¯åãã«ãªããããå ±éã®ç§å¯éµãäœæããéã®åºæ¬ãšãªããŸãã
ãšã¯èšããäžèšã§åé¡ãªã®ãããäºãã a ãš p ãç¥ã£ãŠããããšãã§ãã
亀æããã£ãæ··åè²ïŒax ããã㯠ayïŒããçžæã®ç§å¯è²ã®å€ïŒx ãš yïŒã¯ç®åºã§ããŠããŸããŸããåãåã£ãæ··åè²ããçµæã 1 ã«ãªããŸã§ a ã§å²ã£ãåæ°ãçžæã®ç§å¯è²ã ããã§ãã
ãªãããæ¯ãåºãã«æ»ã£ãŠããŠããŸããŸããã
ããã§ãçžæã«æž¡ãæ··åè²ã p ã§å²ã£ãäœãã«ãããã©ãã§ãããã
- æ§æ··åè² %
p= æ°æ··åè²ax % p = pubAay % p = pubB
ããã§ããã°ããäºãã a ãš p ãç¥ã£ãŠããŠã pubA ã pubB ããã¯ãç§å¯ã«ããŠãã x ãš y ã®è²ïŒå€ïŒã®ç®åºã¯åçã«é£ãããªããŸãã
ã€ãŸããåãåã£ãæ°ããæ··åè²ãåã ã¯ä»¥äžã®ããã«èšç®ããŠãå ±éç§å¯è²ãç®åºããããšã«ãªããŸãã
- è²äº€æåŸã®å
±éç§å¯è²ã®ç®åºïŒæ°ããŒãžã§ã³ïŒ
-
(pubB)x % p = (ay % p)x % p= å ±éç§å¯è² -
(pubA)y % p = (ax % p)y % p= å ±éç§å¯è²
-
| ã¹ããã | Alice | ãããã«æµããå€ | Bob |
|---|---|---|---|
| å ±éæ å ± |
a, p
|
a, p
|
a, p
|
| ç§å¯éµã®çæ | aliceSec = x |
bobSec = y |
|
| å ¬ééµã®çæ | ax % p = alicePub |
ay % p = bobPub |
|
| å ¬ééµäº€æã | bobPub | alicePub, bobPub | alicePub |
| å ±ééµã®çæ | bobPubx % p = shareSec |
alicePuby % p = shareSec |
|
(ay % p)x % p = shareSec |
(ax % p)y % p = shareSec |
||
(ayx) % p = shareSec |
(axy) % p = shareSec |
æãããŠãå²ã£ãäœãããããã«å²ã£ãäœãããåãå€ã«ãªãã®ã§ããããã
ããã§ã¯ã以äžãèžãŸã㊠Alice ãš Bob ã®å
¬ééµãå
·äœçãªæ°å€ã§äœã£ãŠã¿ãŸããããè²ã®ããã¯ã¹ã«ãè¶³ãç®ã§ã¯ãªãå²ãç®ã®äœããã€ãŸã modïŒå°äœïŒã䜿ã£ãŠããããšã«æ³šç®ã§ãã
ãŸãã¯ãAlice ãš Bob ã¯ç§å¯éµãšããŠãåã
ã©ã³ãã ãªå€ã決ããŸããããã§ã¯ãããããããããã« Alice ã®ç§å¯éµã aãBob ã®ç§å¯éµã b ãšããŸãã
a = 4 // Alice ã®ç§å¯éµïŒã©ã³ãã ãªå€ïŒ
b = 3 // Bob ã®ç§å¯éµïŒã©ã³ãã ãªå€ïŒ
次ã«ãäºåã«åæããŠãã 2 ã€ã®å€ïŒå
±éè²ïŒãšããŠãg ãš p ã®å€ã決ããŸãã倿°ãªã®ã§ãx ãš y ã«ããŠãããã®ã§ãããæ°åã§ãããªãããã¿ããªãã®å€æ°åã䜿ããããã®ã§ã
// äºåã«åæããå€ïŒã»ããã§å
±éè²ãšããïŒ
g = 5
p = 23
g ãš p ã®å€ã§ãããg 㯠generator ã®ç¥ã§ä¹±æ°é¢æ°ã§èšããšããã® seed å€çãªåœ¹å²ãããå€ã§çŽ æ°ã§ããp 㯠primeïŒçŽ æ°ïŒã®ç¥ã§ããããã§ã¯ãäºåã«åæããŠãã 2 ã€ã®å®æ° g ãš p ããããã©ãããçŽ æ°ããããçšåºŠã«èããŠãããŠãã ããã
æ¬æ¥ã¯ãã«ã§ããçŽ æ°ãå ã«äœãããã®ã§ãããããããããããããã« 5 ãš 23 ã«ããŸãã
ã€ãŸããå
¬ééµã¯ 5 ã®åæ°ïŒ5^ç§å¯éµïŒã 23 ã§å²ã£ãäœããªã®ã§ã0 ã 22 ã®éãã¯ã«ã¯ã«åŸªç°ããå€ãšã«ãªããŸãã
ã€ã¡ãŒãžãšããŠã23ïŒ0 ã 22ïŒ æãŸã§è¡šç€ºã§ããæèšãããã5 æãèµ·ç¹ã«ç§å¯éµã¶ãã®æéãé²ããæã®æéãèªåã®å
¬ééµã®æéããããŠçžæã¯ãã®æéã«çžæã®ç§å¯éµã¶ãã®æéãé²ãããšãäºããåãæéã«æ¢ãŸããšããèãã§ãã
ããã§ã¯ããŸã㯠Alice ã®å
¬ééµïŒæ··åè²ãpubAïŒãäœã£ãŠã¿ãŸãããã
äºåã«åæããŠãã g ãš p ãå
ã«ãèªèº«ã®ç§å¯éµïŒaïŒã䜿ã£ãŠèšç®ããã®ã§ãããèšç®æ¹æ³ã¯ä»¥äžã®éãã§ããg ã a åæããŠãp ã§å²ã£ãäœããå
¬ééµãšããŠããã ãã§ãã
pubA = (g)a % p
åæ§ã«ãBob ãå
¬ééµïŒæ··åè²ãpubBïŒãç§å¯éµïŒbïŒã䜿ã£ãŠèšç®ããŸãã
pubB = (g)b % p
次ã«ãåã
ãå
¬ééµã亀æïŒçžæã®å
¬ééµãåç
§ïŒããŠãç§å¯ã®å
±ééµã®èšç®ãããŸãïŒcommonA ãš commonBïŒãèšç®åŒã¯ä»¥äžã®éãã
- Alice ã®èšç®
commonA = (pubB)a % p
- Bob ã®èšç®
commonB = (pubA)b % p
å
±ééµã®èšç®ãšãã£ãŠããç§å¯éµãäœã£ãéã® g ãçžæã®å
¬ééµãšå
¥ãæ¿ããã ãã§ããèŠæ¯ã¹ãŠã¿ãŠãã ããã
ããã§ã¯ãå®éã«ä»£å
¥ããŠïŒa = 4, b = 3, g = 5, p = 23 ã§ïŒèšç®ããŠã¿ãŸãããããããšãå
±éã®ç§å¯éµã¯åãå€ã«ãªããŸãã
- å
¬ééµïŒæ··åè²ïŒã®èšç®
-
pubA=(g)a % p=54 mod 23=4... Alice ã®å ¬ééµ -
pubB=(g)b % p=53 mod 23=10... Bob ã®å ¬ééµ
-
- å
±éç§å¯éµã®èšç®
-
commonA=(pubB)a % p=104 mod 23=18... Alice ã®å ±éç§å¯éµ -
commonB=(pubA)b % p=43 mod 23=18... Bob ã®å ±éç§å¯éµ
-
ãªããšãå²ãç®ã®äœãïŒå ¬ééµïŒããããã«å²ãç®ãããšãäœãïŒå ±ééµïŒãåãã«ãªããŸãããïŒãªã³ã©ã€ã³ã§åäœãèŠã @ paiza.IOïŒ
ãªãåãã«ãªãã®ããšãããšãå°äœïŒmoduloïŒã«ã¯é¢çœãæ§è³ªããã£ãŠãg ãš p ãçŽ æ°ã®å Žåãããæ¡ä»¶äžã«ãã㊠(ga % p)b % p 㯠gab % p ãšåãã«ãªãæ§è³ªããããŸãã
-
(ga mod p)b mod p=gab mod p
詊ãã« (54 mod 23)3 mod 23 ãš 5(4*3) mod 23 ãåãçãã«ãªãã詊ããŠã¿ãŠãã ããã
ãã㯠y = x mod p ã®å Žåãã€ãŸã x ã p ã§å²ã£ãäœãã® y 㯠0ã(p-1) ã®éã埪ç°ãããšããå°äœã®æ§è³ªãšã1 ãšèªåèªèº«ä»¥å€ã§ã¯å²ãåããªãçŽ æ°ã®æ§è³ªãå©çšããŠããŠãããããšå·¡ãã«å·¡ã£ãŠåãã«ãªããããªæãã§ãã
ããã§æ³šç®ããŠæ¬²ããã®ã¯ãäžèšã®èšŒæãæ¡ä»¶ã®è©³çްã§ã¯ãªãã以äžã®ç¹ã§ãã
- å
¬ééµã¯
ga mod pãšãäœãã䜿ã£ãŠããããaãç¹å®ããããšã¯é£ããã -
pãšgãçŽ æ°ã®å Žåãããæ¡ä»¶äžã«ãããŠä»¥äžãæãç«ã€ã-
(ga mod p)b mod pãšããèšç®ã¯ãgab mod pã®èšç®ãšåãçµæã«ãªãã -
(gb mod p)a mod pãšããèšç®ã¯ãgba mod pã®èšç®ãšåãçµæã«ãªãã -
gab mod pã¯ãgba mod pãšåãããšã
-
æ¡ä»¶ãæ°ã«ãªã£ã¡ãã人ã«èª¬æãããšã(ga)b = gabãšãããã¹ãä¹ã®æ³åããšãp ãçŽ æ°ãg ã p 以äžã®æŽæ°ã§ p ã®åå§æ ¹ã®å Žåã«äžèšãæãç«ã¡ãŸãã
以äžãèžãŸããŠãæ¹ããŠå³ãèŠãŠãã ãããæ··åè²ããå²ãç®ã®äœããã䜿ãããšã§ãè²ãåé¢ã§ããªãç¶æ ã«ããŠããã®ãé¢çœããšæããŸãããïŒ
![]() |
|---|
| "DiffieâHellman key exchange" @ ããã£ãã£ãŒã»ãã«ãã³éµå ±æãã®è±èªç Wikipedia ããçè ã«ããæ¥æ¬èªèš³ |
ãã®ãæ··åè²ã亀æããŠå
±éã®ç§å¯è²ãçæããæŠå¿µãããã£ãã£ãŒã»ãã«ãã³éµå
±æãïŒDHïŒãšèšããŸãã
è²äº€æã«äœ¿ãããæ··åè²ã®äœæã¯ãä»åã®ãã㪠mod ã䜿ã£ããã®ä»¥å€ã«ããæ¹çšåŒïŒæ²ç·ïŒã䜿ã£ããã®ïŒECDHïŒãªã©ããããŸãã
ECDH ã®åºæ¬æŠå¿µãã¶ã¯ã£ãšèª¬æãããšãäºåã«å ±éè²ãšãªãæ¹çšåŒã決ããŠãããç§å¯éµãšå ¬ééµãæ¹çšåŒã«æãç®ãã座æšã亀æãããããšã§ããäºãã®ç·ã亀差ããç¹ãå ±éç§å¯éµã®å€ãšãããã®ã§ãã
å
ã® MODïŒäœå°ã%ïŒã䜿ã£ãæ¹æ³ã®ãã€ã³ãã¯ãå²ãç®ã®äœãã䜿ããçµã¿åãããç¡éã«ãããããšã§ãè²äº€æããéã®æ··åè²ãã€ãŸããå
ã®çµã¿åããã«åè§£ã§ããªãç¶æ
ãã«ããããšã§ãã
ããã§ã2 ã€ã®ç¹ãããã°çŽç·ãåŒããããšãæãåºããŠãã ããããããããå°ãåºãããæ¹çšåŒïŒïœïŒïœïœïŒïœïŒãçžæã«æž¡ããŠããæåã® 2 ã€ã®ç¹ã¯çžæã«ã¯ããããŸããã
ãŸãã2 ã€ã®ç¹ã®ãã¡ 1 ã€ãå ±æããŠãããã®æ¹çšåŒïŒãããã¯åŸãïŒãã㯠2 ã€ç®ã®ç¹ã¯ããããªããããåãåã£ãçžæã¯å ã®çµã¿åããã¯ããããªãïŒæ··åè²ããå ±éè²ãšç§å¯è²ã«ã¯åè§£ã§ããªãïŒãšããç¶æ³ãäœããŸãã
ãããŠããäºãã亀æããæ¹çšåŒïŒor åŸãïŒã亀差ããç¹ãå ±éç¹ïŒå ±éç§å¯è²ïŒãšããããšãã§ããŸãã
ãã®ãããªèãæ¹ããçŽç·ã§ã¯ãªãæ¥åæ²ç·ïŒECãElliptic CurveïŒã䜿ã£ããã®ã ECDH ã§ãã
以äžã¯ Go èšèªã§ããããªã³ã©ã€ã³ã§åäœãèŠããŸãã
ãïŒãïŒäœ¿ãã«ã¯ããããªããã§ããã®ïŒïŒããšæããã°ã·ã¡ããã®ã§ããè€éãªä»çµã¿ããªã¹ãã¯ãããäžã§é¢æ°åããŠå©çšããïŒç²ç®çã«é¢æ°ã䜿ã£ãŠããªããšããïŒå€§äºãªäœ¿ãæ¹ãèŠãã蚌æ ã ãšãç§ã¯æããŸãã
ããã§ã®ãã€ã³ãã¯ãäžæ¹åãžã®ç®åºã¯ç°¡åã ããéæ¹åã¯é£ãããïŒããã§ã¯è²åè§£ïŒãšããèãæ¹ããæå·ïŒã»ãã¥ãªãã£ïŒã«ã¯éèŠã§ãããšããå ·äœäŸã§ãã
ã¹ããŒã«ãŒã»ãã£ãŒãªãŒã®äžéè æ»æ
mod ã䜿ã£ã DHãæ¥åæ²ç·ã䜿ã£ã ECDHãã©ã¡ããããšããåé¡ããé€ãã°ãå
ç¢ãªç§å¯ã®å
±ééµãäœæã§ããæ¹æ³ã§ãã
ãããŠããšããåé¡ãšã¯ãäžéè æ»æãã§ãã
èšç®æ¹æ³èªäœã¯å ç¢ãªãã®ã®ãå®ã¯ãããã ãã§ã¯ã»ãã¥ãªãã£ãŒäžãããããããŸããããæ°ã¥ãã§ãããããè²äº€æã§åãåã£ãçžæã®æ··åè²ã®ãé åãã¯ããäºããããããªãããšã«ã
ã¢ãªã¹
ã€ãŸããè²äº€æããŠããçžæãå®ã¯ãã£ãŒãªãŒã ã£ãå Žåã§ãããã£ãŒãªãŒãé©åœãªè²ãäœã£ãŠäž¡è ã«æž¡ããŠããŸãã°ãäž¡è ã¯æ°ä»ããªããã¡ã«ãã£ãŒãªãŒãšã®ãå ±éç§å¯è²ããäœæããŠããããšã«ãªãã®ã§ãã
ããã¯ãäŸãã° github.com ã«ã¢ã¯ã»ã¹ããŠããã®ã«ããããŒã® IP ã¢ãã¬ã¹ã«ã¢ã¯ã»ã¹ãããããšã§å®çŸå¯èœã§ããhosts ãã¡ã€ã«ã®äžæçãªæžãæããããããŒã® DNS ãµãŒããŒãç«ãŠãŠãDHCP ãããããªã©ã§ãã
ãã®ããã«ãäžéã«ãã£ãŒãªãŒçãªã¹ããŒã«ãŒãå±
ãå Žåã®æ»æã«åŒ±ããšããããšã§ããhttps æ¥ç¶ãéèŠãšããçç±ã® 1 ã€ãããã«ãããŸãã
https æ¥ç¶ä»¥å€ã«ã远å 察çãšããŠãã¢ãªã¹ãšãããããªã³ã©ã€ã³ä»¥å€ã§ãäºåã«ã©ã³ãã ãªæ°å€ãå
±æããŠããããšããæ¹æ³ããããŸãããããŠããã®ã©ã³ãã å€ã salt çã«äœ¿ããŸããã€ãŸããçæããå
±éç§å¯éµãçŽæ¥äœ¿ãããå
±éã® salt ãå ããŠããã·ã¥é¢æ°ãéãããã®ãæçµçãªå
±éç§å¯éµãšãããªã©ã§ãã
ããã«ãããäžéè
ãéããšèªå以å€ã¯èª°ã埩å·ã§ããªãç¶æ
ã«ãªãã®ã§ãç°åžžãæ€ç¥ããæå©ãã«ãªããŸããTOTP ãšãã£ãã2 èŠçŽ
æåå³åã§ãããGo èšèªã§æè»œã« TOTP ãå®è£ ããããã±ãŒãžã«ãECDH éµäº€ææ©èœãä»ãããã®ããªãªãŒã¹ããŠããŸãã
https://github.com/KEINOS/go-totp @ GitHub
ããã¯ãECDH éµäº€æã§çæãããå ±éç§å¯éµã TOTP ã®ç§å¯éµã«å©çšããŠãAlice ãš Bob ãåããã¹ã³ãŒãïŒæå¹æéã®ãã n æ¡ã®æ°å€ïŒãçºè¡ã§ãããã®ã§ãããã®ä»çµã¿èªäœã¯äžéè æ»æãåé¿ã§ããŸãããããã®ãã¹ã³ãŒãã SALT å€ãšããŠå©çšããããšã§ãå¶éæéä»ãã®èŠçŽ ã«äœ¿ããŸããããªãããããªæ©èœã§ããã
ãã®ãããªãç§å¯éµãå
±éç§å¯éµãçŽæ¥äœ¿ãããäžæŠããããããã·ã¥é¢æ°ã«éãããã®ã䜿ã£ãããsalt å€ãå ãããšããææ³ã¯ããããããã§äœ¿ãããŸãã
ãããŠãsalt ã®æŠå¿µãããŒã¹ã«ããŠãããã®ã®ãçšéãç°ãªãå Žåãåã
ã«ååãä»ããŠãããããŸãã
äŸãã° MACïŒMessage Authentication CodeïŒãªã©ã§ãããå¡©ãå ããããšããæŠå¿µãæã€ãšãèªãã§ããŠãããŒããªãã»ã©ããšæããããšãå€ãã§ãã
ãšãããããã£ããå¡©ã»è¡æ€ãããŠç¬èªã®å³ä»ããããã®ã«ãåãå³ãæ¯ããããªã®ã«å®ã¯åæèã ã£ããã¿ãããªããªãããŸããçºçãããæäžã«ãªã£ãŠããŸããã
詳ããã¯åŸè¿°ã®ãMD5 ãš SHA-1 ã®ã»ãã¥ãªãã£ã«ã€ããŠãã§ã説æããŸãããå¡©ã»è¡æ€ããã ãã®ç²æœãèã§ã¯ã°ã«ã¡
ããŒã¿ã®ãæçŽããšããŠããã·ã¥å€ã䜿ã
ããã·ã¥é¢æ°ã¯ã»ãã¥ãªãã£çšéã°ãããã¯ããŒãºã¢ãããããŸããããåŠçãã«ç®ãåãããšãæ°å€ã§è¿ã£ãŠããããšããç¹åŸŽã¯ããŒã¿ã®ç®¡çã«æŽ»ããããšãã§ããŸãã
ããã·ã¥å€ã®çéã®äœ¿ãæ¹ã¯ã倿Žã®æ€ç¥ãã§ããïŒãã€ãã©ãããïŒãããã§ãéãããããšããã·ã¥å€ã®çµæã¯å€§ããå€åããŸãããã®ç¹åŸŽã«ããã倧éã®ææžïŒããŒã¿ïŒã§ãã£ãŠãïŒæåã®å€åãæ€ç¥ã§ããã®ã§ããïŒå€åããå Žæã®ç¹å®ã¯å¥ã®è©±ãïŒ
ãã®ãæ¬ç·šã詳现ã«èŠãªããŠãã¶ããšèŠãã ãã§ææ¡ã§ãããçãªæå³ã§ãããã·ã¥å€ããããã€ãžã§ã¹ãå€ããããã¯ãã¡ãã»ãŒãžã»ãã€ãžã§ã¹ãããšåŒã¶ããšããããŸãããŸããããã·ã¥é¢æ°ãã¯ãèŠçŽé¢æ°ããšãåŒã°ããŸãããå人çã«ããèŠããã«...ããšèšãããŠãããŸã£ããæå³ãããããªãã®ãšäŒŒã颿°ãã ãšæã£ãŠããŸãã
ããããæµ·å€ãã©ããªã©ã®åé ã§æµãããååãŸã§ã®ãªããšããã®ãã€ãžã§ã¹ãã®ããã«ã以åãäœã§ãã£ãããããã£ãŠãã人ã«ããäŒãããªã確èªãããããã®ãã®ããšãã£ãã€ã¡ãŒãžã§ãã
ð ãããã·ã¥å€ããã¡ãã»ãŒãžã»ãã€ãžã§ã¹ããã©ã¡ããåããã®ã§ãããæå·é¢é£ãªã©ã®ç¢ºèªã«äœ¿ãå Žåã«ããã€ãžã§ã¹ãå€ããšåŒã¶ããšãå€ãæ°ãããŸãããã®èšäºã§ã¯ãããã·ã¥é¢æ°ãã®å€ãšããæå³ã§ãããã·ã¥å€ããšçµ±äžããŸãã
ãããŒã¿ã«å€æŽããªãããã®ãæãäžè¬çãªããã·ã¥å€ã®æŽ»ç𿹿³ã¯ãããããããŠã³ããŒãã»ãã¡ã€ã«ã®ç¢ºèªã§ãããã
ZIP ã ISO ãšãã£ã巚倧ãªã¢ãŒã«ã€ãã»ãã¡ã€ã«ïŒè€æ°ãã¡ã€ã«ãïŒã€ã«ãŸãšãããã¡ã€ã«ïŒãããŠã³ããŒãããéã«ããªã³ã¯ãšäžç·ã«ãã¡ã€ã«ã®ããã·ã¥å€ãæ·»ããŠãããã¢ã¬ã§ããããŠã³ããŒããããã¡ã€ã«ã®ããã·ã¥å€ãšæ¯ã¹ãããšã§ãç Žæãããã¯æ¹ãããããŠããªãããšã確èªã§ããŸãã
éã«èšãã°ããããã·ã¥å€ãåãã§ããã°ãããŒã¿ã«å€æŽã¯ãªãããšããäœ¿ãæ¹ã§ããŒã¿ã®ç®¡çã«ãå©çšã§ããŸãã
ã¿ããªå€§å¥œã git ãªã©ã¯ããã¡ã€ã«ã® diff ã®ããã·ã¥å€ãæ¯èŒããŠå€æŽããã£ãããæ€ç¥ããŠããŸããã¢ããªãã©ã€ãã©ãªãªã©ã®ç®¡çã§ããã€ããäžè©±ã«ãªã£ãŠããããã±ãŒãžãããŒãžã£ãŒããç«¶åãæ¹ãããé²ãã€ã€å
±éã®åäœããããããã« ã©ã€ãã©ãªå<ããã·ã¥å€> ã®ãããªåœ¢åŒã§å
éšç®¡çããŠãããããŸãã
ä»ã«ããBitTorrentïŒP2P åãã¡ã€ã«è»¢éã·ã¹ãã ïŒãåŸè¿°ãã IPFSïŒP2P å忣ãã¡ã€ã«ã·ã¹ãã ïŒãªã©ã¯ããããã¯ãŒã¯äžã«ãååã¯ç°ãªãããå®ã¯äžèº«ã¯åãããã¡ã€ã«ããã£ãŠããã¡ã€ã«ã®ããã·ã¥å€ã䜿ãããšã§åçã«æ±ããããã«ãªã£ãŠããŸãã
身è¿ãªãšããã§ã¯ãWeb ãµãŒããŒãªã©ã«ç»åããã¡ã€ã«ãã¢ããããŒããããéãæ¢ã«åããã®ããããããã¡ã€ã«ã®ããã·ã¥å€ã§ç¢ºèªãããããã§ããŸãã
ãããå¿çšããŠã埮åŠã«ç°ãªãããã»ãŒäŒŒããããªããŒã¿ããå€ããã®ãªã©ã¯ãã¹ãã¬ãŒãžïŒããŒã¿ã®ä¿åå ïŒã®å®¹éãç¯çŽããããšãã§ããŸãã
äŸãã°ä¿åãããããŒã¿ã n ãã€ãããšã«åå²ããŠãåå²ãããç¶æ ã§ä¿åããŸããæ¬¡ã«ãåå²ãããããŒã¿ã®ããã·ã¥å€ãç®åºãããã€ããªã»ããªãŒïŒ1 ã€ã®èŠªã«å¯Ÿã 2 ã€ã®åãæã€ïŒæ§é ã§åã ããã·ã¥å€ãç®åºããŠããã¡ã€ã«å šäœã®ããã·ã¥å€ãåºããŸããæåŸã«ããããã®å€ã DB ãªã©ã§ç®¡çããŸãã
![]() |
|---|
| ããã·ã¥æš @ Wikipeida ãã |
ããã«ãããé¡äŒŒããŒã¿ãä¿åããéã«ãæ¢åã®å ±éããåå²ããŒã¿ã¯ä¿åãããç°ãªãããŒã¿ã ããä¿åããã°å®¹éãç¯çŽã§ãããšããèãæ¹ã§ããåŸè¿°ãã IPFS ã¯ããã®ä»çµã¿ãããŒã¿ã®ååŸã«ãå¿çšãããã®ã§ããäœè«ã§ãããMD5 ã SHA2 ãšãã£ãããã·ã¥ã¢ã«ãŽãªãºã ãããã®èãæ¹ãããŒã¹ã«ããŠããŸãã
ãã®ããã«ããã¡ã€ã«åãç°ãªã£ãŠããŠããäžèº«ãåããã¡ã€ã«ã§ãã£ãå Žåã¯ããã·ã¥å€ã¯åãããšããããšããéæã«å©çšããããŒã¿ã®ç®¡çæ¹æ³ã«äœ¿ããŸãã
ãã®ããããã¡ã€ã«ã®äžèº«ãç¹å®ããç®çã§äœæãããããã·ã¥å€ãããã£ã³ã¬ãŒã»ããªã³ããïŒæçŽïŒãšåŒã¶ããšããããŸãã
ããã·ã¥é¢æ°ãã»ãã¥ãªãã£ç®çãå€ãã®ã¯ãæçŽãšåãã§ãèå¥ ID ãšããŠäœ¿ããããããªã®ã§ãã
ããã©ã人ã¯ããïŒããããé»åž³æ³ãšãã®ãé»åååŒããŒã¿ãä¿åããéã®èšæ£ã»åé€ã»æ¹ç«
é èšè ã®äºèšãæ ä¿ããïŒåœãããšã¯èšã£ãŠãªãïŒ
ããŠããã®ãããã·ã¥å€ãåããªãããŒã¿ã«å€æŽã¯ãªããä»çµã¿ãããã«å·¥å€«ãããšãã俺æ§ãé»åèšŒææžãäœããŸãããé»å眲åãã§ãªããé»åèšŒææžãã§ãã
ã©ãããäºããšèšããšããããã·ã¥å€ããšãå ¬ééµã»ç§å¯éµæå·ããçµã¿åãããããšã§ç°¡æçãªé»åèšŒææžãäœæã§ããã®ã§ãã
ã€ãŸããå 容ãåããã®ã§ãããããšã蚌æã§ããã®ã§ããïŒå 容ãä¿¡çšã§ãããšã¯èšã£ãŠãªãïŒ
å ·äœçã«èšããšããã¡ã€ã«ã®ããã·ã¥å€ãèªåã®ãç§å¯ãéµã§æå·åããŠå ¬éããã°ãããã俺æ§é»åèšŒææžã«ãªãã®ã§ãã
ãŸãã¯æå·åã«ã䜿ãå ¬ééµãšç§å¯éµã䜿ã£ãããªãã¡ãã£ãŠèšŒææžã®äœææ¹æ³ã§ãã
- èªåãæ£ãããšèªãããã¡ã€ã«ã®ããã·ã¥å€ãèªåã®ãç§å¯éµãã§æå·åããããããèšŒææžããšããŠãã¡ã€ã«ãšäžç·ã«å ¬éãïŒçžæã«æž¡ãïŒãŸãã
- çžæã¯ããã®ãã¢ãšãªããå ¬ééµãã§èšŒææžã埩å·ããŠå¯Ÿè±¡ã®ãã¡ã€ã«ã®ããã·ã¥å€ãšæ¯èŒããŸãã
- åãããã·ã¥å€ã§ããã°ãçžæã¯ãèªåãèªãããã¡ã€ã«ã§ãããããšã確èªã§ããŸãã
ããã¯å ¬ééµã»ç§å¯éµã®ãçæ¹ã®éµã§æå·åãããã®ã¯ãããçæ¹ã®éµã§ãã埩å·ã§ããªãããšããç¹åŸŽã掻ãããææ³ã§ãã
ããã§ãå¥ã«ããã·ã¥å€ãããªããŠããã¡ã€ã«èªäœãç§å¯éµã§æå·åããã°ãïŒåŸ©å·ã§ãããïŒããèªäœã蚌æã«ãªããããªããããšãæ°ã¥ããããããŸããã
éãã
確ãã«ããªãã¡ãã£ãŠèšŒææžã§ã¯ããã¡ã€ã«ã®ããã·ã¥å€ã®èšç®ãâãèšŒææžã®åŸ©å·ãâãããã·ã¥å€ã®æ¯èŒããšç¢ºèªããã®ã«ãããããæéãããããŸãã
å ¬ééµã§åŸ©å·ã§ãããäžçºã§ç¢ºèªã§ããã®ã§ãããåé¡ã¯ãæå·åãã§ãã
ãšããã®ãã埩å·ã®åŠçã¯ããã·ã¥å€ã®åŠçããè² è·ïŒæéïŒãããããŸãããããããã¡ã€ã«ã»ãµã€ãºãç¡é§ã«å€§ãããªããŸããã®ã¬åäœã®å€§ããªãã¡ã€ã«ã®å Žåã¯ãç¹ã«é¡èã§ãã
ã誰ãã¢ã¯ã»ã¹ããŠããããã©ãèªåã®æäŸãããã¡ã€ã«ã ãšãŠãŒã¶ãŒã確èªã§ããããã«ããŠãããããå Žåã®æ¹ãå€ããããäžè¬å ¬éããŒã¿ãæå·åããŠæäŸããããšã¯ïŒããããšã¯ãããŸããïŒå°ãªãã§ãã
ãšã¯èšããããã·ã¥å€ã䜿ãã«ããŠããèšŒææžã®ç¢ºèªã« 3 ã¹ããããããã®ã¯æéã§ã¯ãããŸãã
... ... ã©ããããã
ããã§åºãŠããã®ããäž¡æ¹ã®ããæã©ãããããããžã¿ã«çœ²åãã§ãã
ãé»å眲åããšãããžã¿ã«çœ²åãã¯ããŸããé»åæºå°ããšãé»åæŒå°ãã®ããã
ããªãããé»åž³æ³å¯Ÿå¿ã ã£ãŠããŒããšèšããã°ã°ãããèšäºããµãŒãã¹äŒç€Ÿã«ãã£ãŠèšã£ãŠããããšãéããããããããã«ãªã£ã人ã¯å€ãã®ã§ã¯ãªãã§ããããã
ãããæå®äŒæ¥ãšã¿ã€ã ã¹ã¿ã³ãã»ãµãŒãã¹ã®å¥çŽãããªããšãããªãã ã®ãåžé·ã«ç³åããã ã®ããããªãã ã®ãæ å ±ãé¯ããããŠããæãã§ãã
ãã®å ŽåããŸãã¯æ å ±ã®æ¥ä»ãæŽæ°æ¥ã確èªããŠãã ããããšèšãã®ããé»åž³æ³ã¯èŠä»¶ãäºè»¢äžè»¢ããŠãããããå å®¹ãææã«ãã£ãŠå€ããã®ã§ãã
ç¹ã«ãããŒããŒã¬ã¹åãšé»åž³æ³å¯Ÿå¿ããŽããã£ã«èããŠãããšãe-ææžæ³ã®ã¹ãã€ã¹ãå¹ãããŠãã³ããŒã®æçã«åãããŸããæ å ±ãé¯ããããäžã§åççç¡ç¥ãéæã«èšèã®æè¡ã䜿ãå¶æ¥ããµã€ããå€ãããã§ãã
ãŸãã¯ãé»åž³æ³ã®ïŒåªè¯ãªé»å垳簿ã§ã¯ãªãïŒæäœéã®èŠä»¶ãææ¡ããã®ã倧äºã§ãã
ãªããªã確å®ç³åã§èšããçœè²ç³åãããéè²ç³åãããã®éãã®ãããªãã®ãªã®ã§ããŸãã¯ãç³åããããšãã倧äºã§ãããšã¯ããŒãã¹ïŒãŸããã«èšé²ãããšå®£èšãã人ã«ã¯ç¹å žãã€ãïŒãšããé¢ä¿ã«è¿ãããã§ããããŒããŒã¬ã¹ãªã©ãäžç³äºé³¥ãçããããŸããäœèšãªãªãã·ã§ã³ã«è¿·ããããŠå¯Ÿå¿ãé ããããã¯ããã£ãã£ã£ãšæäœéèŠä»¶ãç¶²çŸ ããæ¹ãããã§ãã
ããŠããã®äžã§ãœãããŠã§ã¢ã»ã¡ãŒã«ãŒã«ãã£ãŠæå³åãã«ãã©ãããããã®ããé»å眲åãã§ãã
ã¹ãã£ã³ãããã³ã³ã®ç»åã貌ãä»ããããšããé»å眲åããšèšã£ããããã³ã¿ããã»ããã§å£²ãã€ããŠææžããµã€ã³ããããžã¿ã«ã§çœ²åããšèšã£ããã
è±èªã§ã¯ãé»å眲åãã "Electronic Signature"ããããžã¿ã«çœ²åãã "Digital Signature" ãšæç¢ºã«äœ¿ãåããŠããŸãã
"Electronic Signature" ã¯ãææžãã®ãµã€ã³ããã³ã³ã®ã¹ãã£ã³ãªã©ã§ãæ¬äººã®åæãæ¿èªã瀺ãã ãã®ãã®ããæããæ¬äººç¢ºèªã®ããã«æå·æè¡ãå¿ ãããå¿ èŠãšããªããã®ãèšããŸãããé»åæºå°ããšãèšãããã®ã§ãã
察ã㊠"Digital Signature" ã¯ãæ°å€åãããããŒã¿ãå ¬é鵿å·ã«ããæ¹ãã鲿¢ãšçæ£æ§ãä¿èšŒã§ããããã«ãããã®ã§ããå¥çŽæžãå ¬çæžé¡ãªã©ã§ã眲åãšäžç·ã«æŒããšèšãæå³ã§ã¯ãé»åæŒå°ããšãèšããŸãã
ãããŠããããžã¿ã«çœ²åãã®èŠ
åŸè¿°ããŸãããéåžžãå ¬ééµããããã°ããžã¿ã«çœ²åããã眲åã¯æ€èšŒã§ããããã眲åãã¡ã€ã«ãããŒã¿ã®é»åèšŒææžãããã«ãªããŸãã
ãããããã®å ¬ééµãæ¬åœã«æ¬äººã®ãã®ã§ããããéèŠãšãªãããããã®å ¬ééµãã©ãããæã£ãŠããã®ãã倧äºã«ãªããŸãããããŠãæã£ãŠããå ïŒå ¬ééµåºç€ïŒãïŒå ¬çæ©é¢ãç¥å床ãªã©ïŒä¿¡çšã§ããå Žåããããããžã¿ã«çœ²åããå ¬ééµã§ããã°ããã®å ¬ééµã¯ä¿¡çšåºŠãé«ããšããçå±ã§ãå ¬ééµãšææè ã®æŠèŠãšå ¬ééµåºç€ã«ããããžã¿ã«çœ²åãã»ããã«ãããã®ããé»åèšŒææžããšèšããŸãã
ã€ãŸããããŒã¿ã«å¯ŸããŠèªãã蚌æãããé»åèšŒææžããšã蚌æè ã®ååšã蚌æãããé»åèšŒææžãããããããã©ã¡ããæãã®ãæèã§å€æããå¿ èŠããããŸããæ¥æ¬èªé£ããã
ããã§ã¯åè ã®ãããŒã¿ã«å¯ŸããŠèªãã蚌æããããã®çœ²åãã«ã€ããŠèšåããŠããŸãã
ããŒã¿ã®ããã·ã¥å€ãç§å¯éµã§æå·åããå ¬ééµã§åŸ©å·ããããã·ã¥å€ãå®éã®ããã·ã¥å€ãšåèŽããå Žåããã®å ¬ééµã®ææè ãèªãããã¡ã€ã«ã§ãããšããèãæ¹ãåºæ¬ã§ã¯ãããã®ã®ãå·¥æ°ãå€ãã®ãåé¡ã§ãã
ããã§ãããã¡ã€ã«ããšãç§å¯éµããããã·ã¥é¢æ°ã«éããŠãŽãã§ãŽãã§ãããã®ãã眲åããšãã確èªåŽã¯ããã¡ã€ã«ããšãå ¬ééµããšã眲åãã®ããŒã¿ããããã·ã¥å€ãç®åºããåãã§ããã°ã眲åãã¯æå¹ãšå€æããæ¹æ³ããããŸãã
ããã§ã®ãã€ã³ãã¯ãç§å¯éµãããã·ã¥å€ã眲åãæ°å€ã§ãããããšãšãã眲åã«å¿ èŠãªå ¬ééµãç§å¯éµã¯ã©ã³ãã ãªæ°å€ã§ãæ§ããªãããšããããšã§ãã
ããå°ãã¶ã¯ã£ãšèª¬æãããšããé»å眲åãã¯ç§å¯éµããäœæãã眲åéµãšãSiglet ãšåŒã°ããå°ããªããŒã¿ãã»ãããšãã 64 ãã€ãã®ããŒã¿ã§ããSiglet ãšã¯ãããã·ã¥å€ã»ç§å¯éµïŒçœ²åéµã§ç®åºãããå€ã§ãã䜿ãããããã·ã¥å€ã¯ã眲åéµã®äžéšãšãã¡ã€ã«ãããã·ã¥é¢æ°ã«éãããã®ã§ãã
確èªåŽã¯ããã¡ã€ã«ãšçœ²åéµãããã·ã¥é¢æ°ã«éããããã·ã¥å€ã»å
¬ééµïŒçœ²åéµ ã§ Siglet å€ãšåããæ€èšŒããããšã§ç¢ºèªããŸãã
æå·åã»åŸ©å·ã䜿ãããšãããã·ã¥å€ãåºãã ãã§ãããèšç®éãå°ãªãéãã®ã§ãçŸåšã¯ãã®ææ³ãã¡ãžã£ãŒã§ãããã®ææ³ãã·ã¥ãã¢çœ²åãšèšããŸãã
ããã§éèŠãªã®ãã眲åããšããåèªã®åèªèã§ãã
ã眲åãã¯è±èªã§èšããšãsignãã§ããæ¥åžžã§ã¯ã瀟é·ãããã«ãµã€ã³
瀟é·ããµã€ã³
ããããéèŠãªã®ã¯ãã³ã³ã§ã¯ãªãããã®äººãèªãããã®ã§ããããšèšŒæã§ããããšã§ãããã®ãããææžãã®ãµã€ã³ã§ãããããæå°ã§ãããããã§ãã
é»å眲åãåãã§ããããã®äººãèªãããã®ã§ããããšèšŒæã§ããã°ãäœã ã£ãŠããã®ã§ãã
確ãã«ãé»å眲åã«äœ¿ããã³ã³ïŒéµïŒã¯å€§äºã«ããªããšãããªãã®ã§ãç§å¯éµããšããèšãæ¹ãããŸããããããã ãããšèšã£ãŠãç§å¯éµã§é»å眲åããããšããã®ã¯æå·åãããšããããã§ã¯ãããŸããã
ãã©ãã§ããããç§å¯éµvalueïŒäŸ¡å€ïŒãåŒãåºãã®ã«å¿
èŠãªéå
¬éã®å€ã§ãããã®ãããæå·åçšã®ç§å¯éµã§ãªããŠããã©ã³ãã ãªæ°å€ã§ãæ§ããªãã®ã§ãã
å ¬ééµã»ç§å¯éµã«ãã眲åã§ã¯ RSA éµã䜿ã£ã眲åãæåã§ãããããã¯ãããŸããŸãæå·çšã®éµã眲åã«äœ¿ãããšããã ãã§ãã眲å㯠RSA éµã§è¡ããã®ããšããããã§ã¯ãããŸããã
æè¿ã§ã¯ git ãªã©ã§ãç§»è¡ãé²ãã§ãããã·ã¥ãã¢çœ²åã® 1 ã€ã® Ed25519 ãäž»æµã«ãªãã€ã€ããããã§ããïŒRSA ãš Ed25519 ã®åŒ·åºŠã®éãã¯ãåŸè¿°ãã IPFS ã§è»œã説æããŸãïŒ
é話äŒé¡ã
ããŠãæ€èšŒã蚌æã«ããã·ã¥å€ã䜿ãã¡ãªããã¯ããŒã¿ãµã€ãºãå°ããã§ããã ãã«éããŸããã
ç§å¯ã®éµãããŒã¹ã«äœæãããäžç¹å®å€æ°ãå ¬éãããéµã§ç¢ºå®ã«ç¢ºèªã§ããã°ãäœã ã£ãŠçœ²åïŒãµã€ã³ïŒãšãªããŸããå¥ã«éµãæå·åçšã®éµã§ãªããã£ãŠããã®ã§ãã
ããšã¯ãããã³ã«
ã©ã®ãããªæ¹æ³ã«ãããé»å蚌æã¯ãæ¬ç©
眲åã®äŸãšããŠãGitHub ãªã©ã®ãªããžããªããOS ãªã©ã®ãªãªãŒã¹ããŒãžã§ããªãªãŒã¹ããããã¡ã€ã«ãšå
±ã« *.sha256 *.sha256.sig ãšãã£ããã¡ã€ã«ããã£ããããŸããããããã§ãã
*.sig 以å€ã®æ¡åŒµåããããŸãããããããããããã¡ã€ã«ã®ããã·ã¥å€ãçŸ
åãããªã¹ããšããã®ãªã¹ãã眲åãããã¡ã€ã«ïŒ*.sig ã *.gpg ãªã©ïŒã®ã»ããã倧åã§ãã
- 倧容éã®ãã¡ã€ã«ãæ ä¿ããããã«ãããã·ã¥å€ã®ãªã¹ããšãããã眲åããäŸ | 22.04 @ Ubuntu ãªãªãŒã¹ããŒãž
眲åãã¡ã€ã«ãããå Žåã¯ããªããžããªã»ãªãŒããŒãã察象ã®ãã¡ã€ã«ãæ£åŒãªãã®ã§ãããšãµã€ã³ïŒçœ²åãsign*.sig ãã¡ã€ã«ãæºå°ã®ãããªåœ¹å²ãæã¡ãŸãããããŠãæºå°ãšå€åãéãããŠç
§äŒãã圹å²ãããã®ããªããžããªã»ãªãŒããŒã®å
¬ééµã§ãã
ããã§åŸ©ç¿ã§ãããéèŠãªã®ã眲åãã¡ã€ã«ã¯å®å šæ§ã蚌æãããã®ã§ã¯ãªããšããããšã§ãã
ãããŸã§ã代衚è
ãèè
èªèº«ããèªãããã®ã§ããããšãããµã€ã³ããããã®ãªã®ã§ãããã®ããããµã€ã³ïŒ*.sigïŒããã£ãŠããç²å€ãä¿ã«èšãããããå°ãã§ããå¯èœæ§ããããããå¿
ããããå®å
šã§ããããšã¯èšããªãããšã念é ã«çœ®ããŸãããã
ããã§ããµã€ã³ïŒçœ²åãã¡ã€ã«ïŒãããããããªããã§ã¯ããã£ãæ¹ãå®å¿æãéããŸããåãæžé¡ã§ã瀟é·å°ãæŒããããã®ãšãããã§ãªããã®ã®ãããªéãã§ãã
ãã¹ã¿ãŒãããã¡ãã¯ããããæ©ãé£ãããã®ããã
以äžãå ·äœçãªçœ²åïŒãµã€ã³ïŒã®ä»æ¹ãšæ€èšŒã®äŸã§ãã
*.sha256 ãåãã¡ã€ã«ã®ïŒSHA2ã® 256,SHA256 ã«ããïŒããã·ã¥å€äžèŠ§ã§ *.sha256.sig ããã®çœ²åãã¡ã€ã«ã§ãã
$ # ããã·ã¥å€ã®ç®åº
$ openssl dgst -sha256 sample.txt >sample.hash
$ # ãç§å¯ãéµã§çœ²åïŒsign, signatureïŒ
$ openssl rsautl -sign -inkey privatekey.pem -keyform PEM -in sample.hash >sample.sig
$ # ãå
¬éãéµã§æ€èšŒïŒverifyïŒ
$ openssl rsautl -verify -inkey publickey.pem -pubin -keyform PEM -in sample.sig
ãããã®æ¹æ³ã§ãããã®ãããªããç§å¯éµã»å ¬ééµã®ãã¢éµã®äœæããèšŒææžã®äœæãã埩å·ããã³æ€èšŒããšãã£ãäžé£ã®ä»çµã¿ãç·åããŠãããžã¿ã«çœ²åããšåŒã³ãŸããèšŒææžã®äœæã¯ããããã®å¿çšã§ãããããŸããã
ããžã¿ã«çœ²åã®é¢çœãäœ¿ãæ¹ãšããŠã¯ãäºèšã®æžããªã©ããããŸãã
äºåã«äºèšãšäºèšããæ¥ä»ãæžããŠããããç§å¯ãéµã§æå·åãããã®äºèšïŒãã¡ã€ã«ïŒãšããã®é»åèšŒææžãåæã«å ¬éããŸãããããŠäºèšåŸã«ãå ¬éãéµãå ¬éãããªã©ã§ãããŸããäºèšãªã®ã§æ®éã«å ¬éãã¡ãã£ãŠãè¯ããã§ããã©ã
äžèšã³ãã³ãã®ããã«ããã¡ã€ã«ãããžã¿ã«çœ²åããããšã¯é£ãããã®ã§ã¯ãããŸããã
ãã¡ã€ã«ãç§å¯éµïŒéå ¬éå€ïŒã§çœ²åããŠãå ¬ééµïŒå ¬éå€ïŒãå ¬åŒãªå Žæã«å ¬éããã°ãäœã«ã§ããå ¬åŒãªãã®ããšããŠç€ºããŸãã
åŸè¿°ãã NFT ã§ãè¿°ã¹ãŸãããããžã¿ã«äœåã®äœå®¶ã®æ¹ã«ã¯ãèªèº«ãå®ãããã«ãéµã®äœæãšçœ²åã®ä»æ¹ã¯ããã²èŠããŠãããããä»çµã¿ã§ãã
è¥å€§åããªããã¿ãŒã³ ID
ãåŒæ°ãã©ãã ãé·ããŠããããã·ã¥å€ã¯åºå®é·ã®æ°å€ãã§ããããšãã¡ãªããã§ããã€ãŸããããŒã¿ããã以äžå¢ããªããšããããšã§ãã
äŸãã°ãWeb ãµã€ãã®ããŒãžé·ç§»
$list_url_visited=[
'http://hoge.com/p1',
'http://hoge.com/p6',
'http://hoge.com/p4',
...
];
asort($list_url_visited); //é
åããœãŒã
$string = implode(' ', $list_url_visited); //é
åãæååã«çµå
$id_visited = hash('md5', $string); //æååãããã·ã¥å
- ãªã³ã©ã€ã³ã§åäœãèŠãŠã¿ã@ paiza.IO
ãã®è¡åãã¿ãŒã³ã«åºå®é·ã® ID ãæ¯ããã¡ãªããã¯æ©æ¢°åŠç¿ãªã©ã«ãå¿çšã§ããŸãã
身è¿ãªãšããã§ã¯ããªã³ã¯ãéãããšã㊠URL ãèŠããšããããšããã·ã¥å€ã£ãœããã®ãããã®ãèŠãããšããããšæããŸãããã¢ã¬ã§ãã
ãªããªããããã·ã¥å€ã¯æ°å€ãªã®ã§æ©æ¢°åŠç¿ã«ãããã颿£å€ãã®ç¹åŸŽéãšããŠã䜿ããããã§ãã
ð Â æ©æ¢°åŠç¿ã«ãããã颿£å€ããç°¡åã«èª¬æãããšãæ°å€ã®å€§ããå°ããã«æå³ããªããã®ããæ°å€ãšæ°å€ã®å·®ã«é¢ä¿ããªããã®ã§ããããªã³ãŽã¯ 1ãããã«ã³ã¯ 2ããšãã£ããç¹åŸŽã« ID çªå·ãæ¯ã£ãæ°å€ã®ãããªãã®ã§ãã
ãã¡ããããŒãžé·ç§»ã ãã§ãªãã5x5 ãã¯ã»ã«ã 10,000x10,000 ãã¯ã»ã«ãšãã£ããã©ããªãµã€ãºã®ãã¯ã»ã«ã»ããŒã¿ã«ãåºå®é·ã® ID ãæ¯ãããšãã§ããŸãã
ã€ãŸããããã·ã¥é¢æ°ã®ç¹åŸŽãããçè§£ããã°ãã¢ã€ãã¢æ¬¡ç¬¬ã§ããŸããŸãªæŽ»ç𿹿³ããã颿°ã§ãããã®ã§ãã
ãã®ããã·ã¥é¢æ°ãããã·ã¥å€ã®æŽ»ç𿹿³ã®äŸãšããŠãIPFSããšããããã¯ãã§ãŒã³ããããŠãNFTãããããããšæããŸãã
ããã·ã¥é¢æ°ã𿬡äžä»£ãã¡ã€ã«ã·ã¹ãã IPFS ã®é¢ä¿
IPFS ãšèšãçšèªãè³ã«ããããšã¯ããã§ããããã以åããååšããŠããã®ã§ããã2020 ã 2021 幎ã«ãããŠè²ã
ãªçç±ã§è©±é¡ã«ãªã£ããã®ã§ãã
IPFS 㯠Inter Planetary File System ã®ç¥ã§ãæ¥æ¬èªã«èš³ããšãææ
ãšãŠã壮倧ãªååã§ãæå³ãäžæã§ããããããå 容ã¯ã·ã³ãã«ã§ãã
åŸæ¥ã® Web ã®ãã¡ã€ã«ã»ã·ã¹ãã ããå Žæããæå®ããŠã³ã³ãã³ããååŸããŠããã®ã«å¯Ÿãã
IPFSã¯ãå 容ããæå®ããŠã³ã³ãã³ããååŸãããWEB 3.0 æä»£ã®æ°ãããã³ã«ã
ãïŒèªåã§ææãšãèšã£ã¡ãã£ãŠããïŒããšæãããããããŸãããããããçŸåšã®ã€ã³ã¿ãŒãããã®èµ·æºãšããªã£ã ARPANET ããIntergalactic Computer NetworkãïŒéæ²³
Web 3.0ãã¯ããŸã Web3 ãšããæµè¡èª
ãããã説æãããIPFSãããããã¯ãã§ãŒã³ããNFTããªã©ã¯ãWeb 3.0 ãªããšãããšåŒã°ããããšããããŸããããã§æ³šæããŠæ¬²ããã®ããåã Web 3.0 ãšèšã£ãŠãã人ã«ãã£ãŠæå³åããç°ãªãããšã§ãã
Google Map ãç®åãã« Ajax ãªã©ãæµè¡ã£ãããWordpress ãªã©ã«ãã£ãŠèªåã§ããã°ãç«ã¡äžãããã§ããããã«ãªã£ãé ã® Web 2.0 ããŒã ãèŠããŠããæ¹ãå€ããšæããŸãããã®ããŒã ãç¥ã£ãŠãã人ã«ã¯ãããããã»ãã³ãã£ãã¯ã»ãŠã§ãã®æä»£ïŒãã£ã ã»ããŒããŒãºïŒãªãŒã® Web3.0ïŒãå°æ¥ãããšæããããããŸããã
ããããããããèŠããšãWeb 3.0ãã§ã¯ãªããWeb3ããšè¡šèšãç°ãªã£ããããªãããã©ã€ãã·ãŒã®åã®å
ã«ãéã®èããã¡ãã€ããããäœããããã®ãæ¿ãããŠããéåæãæãããšæããŸããããã¯ãWeb 3.0ããWeb3ããWeb3ïŒäŒæ¥åïŒããšããã¹ãŠãå¥ã®ãã®ãæããŠããã®ã«ãæ ¹åºã«ãããæ¬¡ã®æä»£ã®ã€ã³ã¿ãŒãããããšããå
±éé
ããã¿ã«ãããŠããããã§ãã
çŸåšã®ãAIãããããäœã§ããããžã¿ã«ããšã€ããã°æ Œå¥œãããšèšãããæä»£ã®ããã«ããWeb3ããšããçšèªãèãããã倧åããèªåã®ããžãã¹ã®ããã«äºã
ããèšã£ãŠããããšæã£ãŠãèŠæããŠèããŠè¯ããšæããŸããåã
ã®çšèªãçè§£ããŠããã°ããæè¡ããšãããžãã¹ãã®å¢çç·ãèŠãããããããã¯å
ç©ååŒãçãªå§èªã ãªããšæ°ä»ããã¯ãã§ãã
ããŠããå 容ãæå®ããŠã³ã³ãã³ããååŸããããšèšãã®ã¯ãã³ã³ãã³ãã®ããã·ã¥å€ãæå®ããŠããšå矩ã§ãã
çŸèã¯äžèŠã«ããããªã®ã§ã以äžã®ãªã³ã¯ãå¥ã¿ãããŠã£ã³ããŠã§éããŠã¿ãŠãã ããããã°ãããããšã³ã³ãã³ãã衚瀺ããããšæããŸãïŒãã®å Žåã"Hello, Qiita!" ã®ããã¹ãïŒã
詳ããã¯åŸè¿°ããŸãããäžèšã® bafy...p4oi ãã³ã³ãã³ãã®ããã·ã¥å€ãå
ã«äœããã CID ãšåŒã°ããã³ã³ãã³ãã® ID ã§ãããã® CID ã IPFS â HTTP ã®ã²ãŒããŠã§ã€ã® 1 ã€ã§ãã https://ipfs.io/ipfs/ ã«ãªã¯ãšã¹ãããŠãã³ã³ãã³ãã衚瀺ããŠããããšã«ãªããŸãã
誰ããé²èЧããŠããå Žåã¯ããã£ãã·ã¥ãåããŠã³ã³ãã³ããå³æè¡šç€ºãããŸãããã£ãã·ã¥ã®æéãåããŠããå ŽåãHTTP ãµãŒããŒã¯ IPFS ãããã¯ãŒã¯ã«åãåãããŠè¡šç€ºããŸããåã CID ã®ã³ã³ãã³ããã·ã§ã¢ïŒPIN çãïŒããŠããæå¯ãã® IPFS ããŒãããããã¯çè
ã®èªå®
ã«ãã RaspberryPi Zero ã®ããŒããåãåããã«åå¿ããæ°åç§ã»ã©åŸ
ã€ãšè¡šç€ºãããŸãã
ããã§èšãããŒããšã¯ãP2P ãããã¯ãŒã¯ã«ããããã¢ãšå矩ã§ãIPFS ã¢ããªãåããŠãã端æ«ïŒãã·ã³ïŒã®ããšã§ãã
ãµãŒããŒã§ãããã¯ã©ã€ã¢ã³ãã§ããã端æ«ããã¢ãšåŒã³ãŸãããä»ã®ãã¢ããèŠãŠãµãŒããŒç¶æ
ïŒãªã¯ãšã¹ããåãä»ããŠããç¶æ
ïŒã®ãã¢ãããŒããšåŒã³ãŸãïŒIN ãš OUT ã®æ¥ç¹ãšèãããšããã§ãããïŒããããŠåããµãŒãã¹ãæäŸããŠããããŒãã®çåã®éãã¯ã©ã¹ã¿ãšåŒãã ããããŸãããã®å ŽåãIPFS ã¯ã©ã¹ã¿ã§ãã
å
è¿°ããããã«ããã® bafyb... ããå§ãŸãæ°å€ã CID ãšåŒã°ãããã³ã³ãã³ãã®ããã·ã¥å€ãå
ã« IPFS ã®æžåŒã§è¡šçŸãããã®ã§ãã
ãã®å€ã ãã§ Base32ïŒ32 鲿°ïŒã§è¡šçŸããã sha2-256 ã¢ã«ãŽãªãºã ã䜿ã£ãã³ã³ãã³ãã®ããã·ã¥å€ã CID v1 ã®æžåŒã§èšèŒãããã®ã§ããããšããããšãããããŸãããã¡ãããããã·ã¥å€ãªã®ã§ããã®å€ããã ãã§ã¯ã³ã³ãã³ãã "Hello, Qiita!" ã§ããããšã¯ããããŸããã
-
CID ã€ã³ã¹ãã¯ã¿ã§ã
bafybei...p4oiããåŸãããæ å ±ãèŠãŠã¿ã
CID ã€ã³ã¹ãã¯ã¿ã® DIGEST (HEX): ã®å€ããå
·äœç㪠CID ã®ããã·ã¥å€ãªã®ã§ãããããŒã«ã«ã§ãã¡ã€ã«ãããã·ã¥é¢æ°ã«éãããã®ãšç°ãªãããšã«æ°ä»ãããããããŸããã
$ echo 'Hello, Qiita!' | sha256sum
5d3f0b287c036f5941a87a7589c8864d5259cdbf59673fe16681a2688baec652 -
$ echo 'Hello, Qiita!' | ipfs add --offline --only-hash --quieter --upgrade-cidv0-in-output
bafybeicd7b7mnnlnpvhv5kimfb5vedgslcwe5bgexj7olcszncnyzvp4oi
ãã㯠CID ã¯ãã¡ã€ã«ãã®ãã®ã®ããã·ã¥å€ã§ã¯ãªããè² è·åæ£ã®ãããã¡ã€ã«ãåå²ããŠããã·ã¥æšã§ç®åºããæçµçãªããã·ã¥å€ã«ãåçš®ãšã³ã³ãŒãæ
å ±ãä»å ãããã®ã CIDïŒIPFS ã«ããããã¡ã€ã«ã®ããã·ã¥å€ïŒãšããŠããããã§ãããã®ãã¡ã€ã«ãåå²ããä»çµã¿ã¯ Merkle DAG ãšåŒãã§ãããã€ã³ã¹ãã¯ã¿ã® MULTICODEC ã§ç¢ºèªã§ããŸãã
次ã«ãBrave ãªã©ã® ipfs:// ãããã³ã«ã«å¯Ÿå¿ãããã©ãŠã¶ããæã¡ã®å Žåã以äžã®ã¢ãã¬ã¹ãã¢ãã¬ã¹ããŒã«ã³ããããŠéããŠã¿ãŠãã ããã
åãããŒã¿ã衚瀺ããããšæããŸãã
Brave ãã©ãŠã¶ã® IPFS æ©èœã¯æ¡åŒµæ©èœæ±ãã«ãªããŸãã
ããã©ã«ãã§ IPFS ã䜿ããŠãã Brave ã ã£ãã®ã§ãããæ®å¿µãªãã v1.69.153 (2024/08/22ïŒãã忢±ãããªããªããŸããã«ãªããŸãããçç±ãšããŠèª°ã䜿ãããšããªãã®ã§æ¬äœã®è»œéåãšéçºè² è·ãæžããããã®ããã§ãããããã IPFS ãå©çšããŠãã人ã¯ãïŒKubo ãªã©ã®ïŒIPFS æ¬äœãã€ã³ã¹ããŒã«ããŠå©çšããŠãããããšæãããŸãã
ä»åŸã¯ Chrome/IE/Firefox åæ§ããã©ãŠã¶ã®æ¡åŒµæ©èœã§å¿
èŠãªäººã®ã¿æ©èœãæ¡åŒµããŠå©çšããããšã«ãªããŸãããšã¯èšããæšæºã§ IPFS ã®ãã€ããªã¯å梱ãããŸããããæ©èœãã®ãã®ã¯æ®ã£ãŠãããããèªèº«ã§ Brave ããã«ããèšå®ããããšã§ç¶ç¶ããŠäœ¿ããŸãããã ããæ¡åŒµæ©èœã®æ¹ãïŒãã°ä¿®æ£å«ãïŒå€æŽã«è¿œéãããããã§ãã
ãCDNïŒããEtagïŒãããã£ãã·ã¥ã»ãµãŒãïŒããšæããããããŸããã
ãŸãã¯ãã©ãã«ããŒã¿ããããããååšãããªãããã·ã¥å€ã§ååŸã§ãããããšããã€ã³ãã§ãã
File System ãšä»ããŠããããP2P åã§ãã£ãããã忣åãã¡ã€ã«ã·ã¹ãã ããšåœ¢å®¹ãããã®ã§ãã¯ã©ãŠã颚ã®ãã¡ã€ã«ã»ã¹ãã¬ãŒãžã®ãããªã€ã¡ãŒãžãåããŸããéããŸãã
ã©ã¡ãããšèšããš gitïŒåæ£åããŒãžã§ã³ç®¡çã·ã¹ãã ïŒãš BitTorrentïŒåæ£åãã¡ã€ã«è»¢éã·ã¹ãã ïŒãè¶³ããŠå²ã£ããããªãã®ã§ãã
ãèªåãå ±æããŠãããã¡ã€ã«ããä»ã®äººãå ±æã®ãµããŒããããŠãããã·ã¹ãã ããšããã€ã¡ãŒãžãè¿ããIPFS ã§ãã£ãŠãèªèº«ã®ã¹ãã¬ãŒãžã¯å¿ èŠã«ãªããŸãã
確ãã«ãèªåã®ã¹ãã¬ãŒãžã¯æã¡ãããªãããšããå Žåã§ãã£ãŠããgit ã§èšã GitHubãGitLabãGitea ã®ãããªææ or ç¡æã®ç¯å²ã§å€éšãµãŒãã¹ãå©çšããããšã¯å¯èœã§ãã
IPFS ã®å€éšã¹ãã¬ãŒãžã»ãµãŒãã¹ãšããŠã¯ Pinata ãªã©ããããŸãããã¯ã©ãŠãã VPS ãªã©ã«ããŒã¿ã眮ã IPFS ãã€ã³ã¹ããŒã«ãããªã©ã®æ¹æ³ããããŸãã
ããããå¿ããŠã¯ãããªãã®ã git ã§ãã£ãŠã IPFS ã§ãã£ãŠãå€éšãµãŒãã¹ã䜿ã£ãå Žåããæ¬æ¥ã¯ããŒã«ã«ç°å¢ã§ç®¡çããããŒã¿ããå€éšã«å§èšããŠããŒã¿ã眮ããŠãããšããã ãããšããããšã§ããçœå®³æã®ãªã¹ã¯åæ£ãã¡ã³ããã³ã¹ãå©äŸ¿æ§ãããéã§è²·ã£ãŠãããšããèªèã倧äºã§ãã
ãã®ãããIPFS ã®å€éšãµãŒãã¹ãèœã¡ããåç£ãããšããŒã¿ã¯æ¶ããŠããïŒã¢ã¯ã»ã¹ã§ããªããªãïŒãšããããšã§ããããŸããWEB3 ç³»ã®å§èªã§ãIPFS äžã«ããŒã¿ãããéããæ°žé ã«ããŒã¿ã¯æ¶ããŸããããšããå£äžã«ãåã¯èšã£ãŠããªããã©ãããŒã¯ãªèªå°ãããããšããæ°ä»ãã§ããããã
ã忣åããçè§£ãã
git ã®ã忣åããŒãžã§ã³ç®¡çã·ã¹ãã ããã¯ãããIPFS ã®ã忣åãã¡ã€ã«ã·ã¹ãã ããåŸè¿°ãããããã¯ãã§ãŒã³ã®ã忣åå°åž³ãã NFT ã®ãåæ£åæææš©ç®¡çã·ã¹ãã ããšãã£ããã忣åããšããçšèªãå€ãåºãŠããŸãã
泚æããªããšãããªãã®ã¯ã忣åã®ã¡ãªãããé倧解éããŠãã忣åãããéäžå€®éæš©åããšèšã£ãŠããŸãããšã§ããç¹ã« IPFSã ãããã¯ãã§ãŒã³ãNFT ãæ±ãäŒæ¥ãã¡ãã£ã¢ã䜿ããã¡ã§ãã
ããããåã ã忣åãã®å
茩ã§ãã git ãã€ã»ã³ã®ã忣åããŒãžã§ã³ç®¡çã·ã¹ãã ããç¥ã人ã¯ãGitHub ãããŠã³ãããšãã¥ãŒã¹ã«ãªããããäŸåããŠããã®ã«ãéäžå€®éæš©åããšã¯å€ã ãšãæ°ã¥ãã§ãããã
ããã§æ¹ããŠã忣åããšããçšèªãèªèããå¿ èŠããããŸãã
ã忣åãïŒdistributedïŒãšããã®ã¯ãã¡ã€ã³ãšãªãäœããçŽæ¥æäœã»åŠçããªãã§ãã³ããŒãããã®ãæäœã»åŠçãããã®ããèšããŸãã
OS ã®ã€ã¡ãŒãžãªã©ãã³ããŒãé
åžããããšãè±èªã§ãdistributeããšèšããŸãããé
åžããããã®ã䜿ãã€ã¡ãŒãžã«è¿ããã®ã§ãã
ãã®ãããæ¡æ£åããé©åãªèš³ã«ãæããŸããããããããŒã«ã«ã«ã³ã㌠or åæããŠããæäœããã®ã§ãã¡ã€ã³ãããŠã³ããŠããåããã®ãå¥ã®å Žæã«ããããšããæå³ã§ã忣åããšåŒã°ããŸããããªã¹ã¯åæ£åããšæããŠãè¯ãã§ãããã
ããããæå³ã§ã¯ git ãã忣åããŒãžã§ã³ç®¡çã·ã¹ãã ããšåŒã¶ã®ãããããããäŸã§ãã
ã¡ã€ã³ã®ã¬ãžã¹ããªïŒäŸãã° GitHubïŒãããŠã³ãããšããŠããã³ããŒãããŒã«ã«ã«ããã®ã§å ±åãããïŒããŒã¿ãã¡ã€ã³ãšäžç·ã«é£ã¶ïŒããšã¯ãããŸããã
æ¬æ¥ã¯ãããã git æ¬è³ªãªã®ã§ãããåé¡ã¯ããŒã«ã«ã«ã GIT ãµãŒããŒã建ãŠãã«å€éšäŸåïŒGitHub ã«äŸåïŒããŠããŸãããŠãŒã¶ãŒèªèº«ãäžå€®éæš©åã«ããŠããããšãªã®ã§ãã
ããŠãIPFS ã®å Žåããç¹å®ã®å ±æãã¡ã€ã«ãåç §ãããšå ±æè ã«çŽæ¥ã¢ã¯ã»ã¹ããŠåç §ããã«ãäžæŠããŒã«ã«ã«ã³ããŒããŠããåç §ããŸãã
ãŸããGitHub ãš GitLab ããã©ãŒãªã³ã°ããããã«ãIPFS ãåç
§ãããã¡ã€ã«ããã³çãããããšã§ïŒpin ã³ãã³ãã§ãèªåãåå
±æããããšã§ïŒåäžé害ç¹ãå°ãªãããããšãã§ããŸãã
ãã®ããã«ãå ±æè ã®ãã·ã³ãããŠã³ããŠãèªèº«ã®ããŒã«ã«ã«æ®ãããã忣åããšåŒã³ãŸãã
ã€ãŸãå°æ¥ãæšæããå°çã®ããŒã¿ã« IPFS ã§æéããããŠã¢ã¯ã»ã¹ãããšããŠãããã£ãã·ã¥ïŒPIN çããããŠããã°ãåãæšæãã誰ããã¢ã¯ã»ã¹ããå Žåããã®ãã£ãã·ã¥ã䜿ãããšã«ãªãã®ã§ããããã IPFS ããææéããã¬ãããšèªç§°ããŠããçç±ã§ãã
ã... ...ïŒNAS ãšããã¡ã€ã«ãµãŒããŒãåç §ããŠãããã·ãšãã§ãã£ãã·ã¥ããã®ãšåããããïŒããšæãããšæããŸãã
å®éã«äŒŒãŠããŸããããããIPFS ã®ãã€ã³ãã¯ãç¹å®ã®å ±æãã¡ã€ã«ãåç §ããéã®æ¹æ³ãã§ãã
http:// ã ftp:// ã¯ãã afp:// file:// ãšãã£ããªãœãŒã¹ãååŸãããããã³ã«ã¯ãç¹å®ã®ãµãŒããŒäžã®ãã¡ã€ã«ãååŸãããã¡ã€ã«ã»ã·ã¹ãã ã§ãã
ãããã忣åã«ããŠã該åœããã·ã¥å€ã®ãã¡ã€ã«ãæã£ãŠãããã·ã³ããååŸããããšãããã¡ã€ã«ã»ã·ã¹ãã ã IPFS ãããã³ã«ïŒipfs://ïŒã§ãã
ã€ãŸããURLããããã¡ã€ã«ã®ãã¹ããæå®ããŠãããã®ãããããã·ã¥å€ããæå®ããŠããŒã¿ãååŸããã®ã§ãã
http://myhost.com/myusr/mydir/hello_qiita.txt
ftp://myhost.com/myusr/mydir/hello_qiita.txt
$ wget http://myhost.com/myusr/mydir/hello_qiita.txt
$ cat hello_qiita.txt
Hello, Qiita!
ipfs://QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
ipfs://bafkreic5h4fsq7adn5mudkd2owe4rbsnkjm43p2zm476czubujuixlwgki
$ # CID v0 ãã©ãŒãããã§ãªã¯ãšã¹ã
$ ipfs cat QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
Hello, Qiita!
$ # CID v1 ãã©ãŒãããã§ãªã¯ãšã¹ã
$ ipfs cat bafkreic5h4fsq7adn5mudkd2owe4rbsnkjm43p2zm476czubujuixlwgki
Hello, Qiita!
ããã¯ãIPFS ã¯åæ£åã§ãããããã ããïŒãã¹ãïŒããã©ããïŒURLïŒãæå®ããã®ã§ã¯ãªããããªã«ãïŒããã·ã¥å€ïŒãæå®ããããšãéèŠããŸããéã«ãã ãããéèŠã«ãªãã®ã¯ãP2P ã§æ¥ç¶ããŠããçžæã«ãªããŸãã
å
·äœç㪠IPFS ã®äœ¿ãæ¹ã¯åŸè¿°ããŸããããŸãã¯åããããã·ã¥å€ãããŒã¹ã«ãããªããžããªãå士ã§ãã git ãš IPFS ã®å
±éç¹ãšéããçè§£ããŸãããã
git ãš IPFS ã®çžéç¹
忣åããŒãžã§ã³ç®¡çã·ã¹ãã ã® git ã®å Žåãadd ãš commit ã³ãã³ãã§ããŒã«ã«ã®ãªããžããªã«ãã¡ã€ã«ãç»é²ãããšããã®çã®ããã·ã¥å€ïŒã³ããã IDãCIDïŒãäœæãããŸãã
$ echo 'Hello, Qiita!' > hello.txt
$ git add .
$ git commit -m "initial commit"
[main (root-commit) 312eb0b] initial commit
1 file changed, 1 insertion(+)
create mode 100644 hello.txt
$ git log
commit 312eb0bf67d49b3107eaccaeb0b0f1fe3f0ae5a9 (HEAD -> main)
Author: KEINOS <github@keinos.com>
Date: Sun Sep 15 18:58:04 2024 +0900
initial commit
ãŸããpush ãããšç»é²ãããã¡ã€ã«ã git ã¬ãžã¹ããªïŒGitHub ã Gitea ãªã©ã® git ãªããžããªçœ®ãå ŽïŒã«åæ ã»å
¬éïŒã·ã§ã¢ïŒãããŸãããããŠä»ã®ãŠãŒã¶ã¯ pull ããåŸããã® CIDïŒã³ããã IDïŒãå©ãã°åãçã確èªããããšãã§ããŸãã
忣åãã¡ã€ã«ã»ã·ã¹ãã ã® IPFS ã®å Žåã䌌ãŠããããã¡ã€ã«ã add ãããšãã¡ã€ã«ãããŒã«ã«ã®ãªããžããªã«ç»é²ããããã·ã¥å€ïŒã³ã³ãã³ã IDãCIDïŒãäœæãããŸãã
$ echo 'Hello, Qiita!' > hello.txt
$ ipfs add hello.txt
added QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B hello.txt
14 B / 14 B [=========================================================] 100.00%
ãŸã name publish ãããš IPFS ãããã¯ãŒã¯ã«ãèªåããã® CID ãæã£ãŠããããšãå
¬éãããŸãã
$ # CID ã QmSu...y5B ã®ãã¡ã€ã«ã k2k...ci4 ã®å
¬ééµãæã€ããŒãããå
¬éããäŸ
$ ipfs name publish QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
Published to k2k4r8ovnhyqds4oh2ndfmzjn9oca0104ekiln8dive2pin83chpbci4: /ipfs/QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
ãããŠãä»ã®ãŠãŒã¶ã¯ããã® CIDïŒã³ã³ãã³ã IDïŒãå©ãã°åãçã®ãã¡ã€ã«ã確èªããããšãã§ããŸããã¡ãªã¿ã«ãã³ããã ID ãã³ã³ãã³ã ID ããåã CID ãšç¥ãããã®ã¯å¶ç¶ã§ãã
ð  IPFS ã§ add ããã® name publish ããèªå㯠BitTorrent ã§èšããšããã®ãã·ãŒããŒããšãªããŸãã
BitTorrent ã®ãã·ãŒããŒããšããã®ã¯ããã¡ã€ã«ã®å
šãŠã®ããŒããæã£ãŠãããã¢ã®ããšãèšããŸãããããŒãããšããã®ã BitTorrent ã IPFS ã¯ããã¡ã€ã«ã倧ããå Žå TCP/IP ãªã©ã®ãã±ããããã«ããŒã¿ãå°ããªããŒãã«åããŠå
±æãããŸããããã«ããããã¡ã€ã«å
šäœã 1 ã€ã®ãã¢ããåãåããã«è€æ°ã®ãã¢ããåãåããããè² è·åæ£ã§ããŸãããããŠããã¹ãŠããéããŠå®æãããã¡ã€ã«ããã·ãŒããïŒçš®ïŒãšããããã®ãã¡ã€ã«ãå
±æããŠãããã¢ã BitTorrent ã§ã¯ãã·ãŒããŒããšåŒã³ãŸãã
ã¡ãªã¿ã« P2PïŒPeer To PeerïŒãªã©ã®ããã¢ããšã¯ããµãŒãã¹ãå©çš & æäŸããŠããã³ã³ãã¥ãŒã¿ã®ããšã§ã1 å°ã§ããµãŒããŒãã§ãããã¯ã©ã€ã¢ã³ããã§ããããã®ãèšããŸããé¡äŒŒçšèªã«ãããŒããããããŸãããããã¢ãããããŒãããåãã§ããéãã¯ããã¢ãä»ã®ãã¢ãããªã¯ãšã¹ããåããå Žåãã€ãŸããµãŒãã¹ãæäŸããïŒãµãŒãïŒç¶æ
ã®ãã¢ããããŒãããšèšããŸãã
ããŠããã®æã® git ãš IPFS ã®éãã¯ãåãåã£ã CID ã®ã³ã³ãã³ããããŒã«ã«ã«ãªãå Žåã®åãã§ãã
git ã¯çžæã pull ããã㯠fetch ãªã©ã§ããŒã«ã«ãåæããŠãããªããšã³ããã ID ãåãåã£ãŠã確èªã§ããªãã®ã«å¯ŸããIPFS ã®å Žå㯠CID ãå©ããŠããŒã«ã«ã«è©²åœãããã¡ã€ã«ããªãå Žå㯠IPFS ãããã¯ãŒã¯äžã®ä»ã®ãã¢ïŒIPFS ããŒãïŒã«åãåãããŠããŒã«ã«ã«ãã£ãã·ã¥ããããšã§ç¢ºèªã§ããããã«ãªããŸãã
ã³ã³ãã³ãååŸãŸã§ã®å€§ããªæµã㯠5 ã¹ããããããŸãããã«ãŒã¿ãŒã®ãã±ãããªã¯ãšã¹ãã¿ãããªãã®ããšèããŠèªããšãã³ãšãããšæããŸãã
- ã³ã³ãã³ãã® CID ããæ¥ç¶ããŠãããã¢ãã¡ã«åãåãããã
- åãåãããåãããã¢ã¯ããã®ã³ã³ãã³ããæã£ãŠããå Žåã¯ããããè¿ãã
æã£ãŠããªãããæã£ãŠãããã¢ãç¥ã£ãŠããå Žåã該åœãã¢ïŒããŒã IDïŒãç¥ããããæã£ãŠããªããç¥ããªãå Žåã¯ãä»ã®æ¥ç¶ããŠãããã¢ã«åãåããããèŠã€ãã£ãå Žåã¯ãäžæãã£ãã·ã¥ããŠæ¬¡åã«æŽ»ããã - CID ãæã£ãŠãããã¢ãç¹å®ã§ãããã該åœãã¢ã«ã³ã³ãã³ãããªã¯ãšã¹ãããŠåãåããããŒã¿ã倧ããããåå²åãããŠããå Žåã¯ãã³ã³ãã³ãã®ç®é²ãåãåãã
- åãåã£ããã®ãç®é²ã®å Žåã¯ãæ¥ç¶ããŠãããã¢ãã¡ã«åå²ãããããŒã¿ïŒCIDïŒãæã£ãŠãããåãåããããïŒ2 ã«æ»ãïŒ
- 忣åãããããŒã¿ã 1 ã€ã«ãŸãšããåºåïŒè¡šç€º or ä¿åïŒããã
ãã®æã®ãäžéã®ãã¢ããã€ãŸããªã¯ãšã¹ããããã¢ãšã該åœãã CID ã®ãã¡ã€ã«ãæã£ãŠãããã¢ã®ãéã«ããä»ã®ãã¢ãã®åãã§ãããçãåãåããããã®ããã€ã³ãã§ããã€ãŸãããããŒã«ã«ã«ãªãã£ããä»ã®ãã¢ã«åãåããããã§ãã
- ãªã¯ãšã¹ãããã
CIDã®ãã¡ã€ã«ããããã¯ãã®äžéšããã£ãã·ã¥ã«ããå Žåã¯ãªã¯ãšã¹ãããŠãããã¢ã«ããŒã¿ãæž¡ãã - ãã£ãã·ã¥ã«ãã¡ã€ã«ããããã¯ãã®äžéšããªãå Žåã¯ãããã«ä»ã®ãã¢ã«åãåãããã
- èŠã€ããããã£ãã·ã¥ããŠããªã¯ãšã¹ãããŠãããã¢ã«ããŒã¿ãæž¡ãã
äžèšã§ããã®äžéšãããšããã®ã¯ããã¡ã€ã«ã倧ããå Žåã¯å°ããåå²ãããŠç®¡çãããããã§ãã
BitTorrent ã§ããããªãŒãã£ãŒãïŒæªå®æã®ãã¡ã€ã«ããããã¯å®æãŸã§ããšäžæ©ã®ãªãŒãã®ããã£ããã¡ã€ã«ãæã£ãŠãããã¢ïŒã¿ãããªã€ã¡ãŒãžã§ãã
ããã«ãããåç §é »åºŠã®é«ããã¡ã€ã«ããããã¯ããã®æçãã¯è²ã ãªãã¢ã«ãã£ãã·ã¥ããããããç·åçã«ããŠã³ããŒããéããªããŸããéã«ãåç §é »åºŠã®äœããã¡ã€ã«ãã®å Žåãæ¢ãåºãã®ã«æéãããããŸããããããžãã®åãã BitTorrent ãªã©ãšåãæèŠã§ãã
ãããªããšãèªåã®ãã¢ïŒIPFS ããŒãïŒã®ãã£ãã·ã¥ããã©ã®çšåºŠã¹ãã¬ãŒãžãå§è¿«ãããããšãããã¡ã€ã«ãååŸããé床ãã©ã®çšåºŠãªã®ãããæ°ã«ãªããŸãã
ãã£ãã·ã¥ã»ãã¡ã€ã«ã®å®¹é
ããã©ã«ãIPFS ã¯ãIPFS ãªããžããªã®ããããŒã«ã«ã»ãã©ã€ãïŒããŒãã£ã·ã§ã³ïŒã®ç©ºãããªããªããŸã§ãã£ãã·ã¥ãããŸãããããŠã容éãã»ãŒäžæ¯ã«ãªããšãå€ããŠåç
§é »åºŠã®äœããã£ãã·ã¥ãåé€ããŠãããŸããmacOS ã§ãã TimeMachine ãšåãèãã§ãã
ãšã¯èšãããã®ãã㪠Winny æä»£ã«ãåé¡ã§ããã£ããè¥å€§åããããŒã«ã«ã»ãã£ãã·ã¥ãã«å¯ŸããŠã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãšãããªãã·ã§ã³ïŒ--enable-gcïŒãçšæãããŠããŸãã
IPFS ããŒã¢ã³ïŒIPFS ã®ãµãŒãã¹ïŒãèµ·åããéã« --enable-gc ãªãã·ã§ã³ãä»ãããšãã¬ããŒãžã³ã¬ã¯ã·ã§ã³ã宿çã«å®è¡ãããèšå®ã«ãªããŸãã
ããã©ã«ãã§ 1 æéããã« 90 æ¥ä»¥äžåç
§ãããªãã£ããã£ãã·ã¥ã¯åé€ãããèªç¶æ·æ±°ãããŸãããããã®æéã容éã®èšå®ã¯ ipfs init ã§äœæããããã£ã¬ã¯ããªïŒãªããžããªïŒã® config ãã¡ã€ã«ïŒ~/.ipfs/configïŒãç·šéããããšã§å€æŽã§ããŸãã
åŸè¿°ãã ipfs.io ã CloudFlare ãªã©ãæäŸããŠããã¢ã¯ã»ã¹ã®å€ããã¢ã¯ 24 æéçµéããŠãã¢ã¯ã»ã¹ã®ãªããã¡ã€ã«ã¯ãã£ãã·ã¥ããåé€ããŠããŸãã
ãŸããBitTorrent ã§èšããã·ãŒããŒã«ãªããããã€ãŸããæ°žç¶çã«ããŒãïŒæäŸïŒããããããŒã¿ã®å Žå㯠2 éãã®æ¹æ³ããããŸãã
- æ®éã«ããŒã¿ã IPFS ãªããžããªã«ã³ãããïŒ
ipfs add <CID>ïŒããã -
ipfs pin <CID>ã³ãã³ãã§ãã£ãã·ã¥ããã³çãããŠããã
ããã³çãããšã¯ãã£ãã·ã¥ã»ããŒã¿ã«ãåé€ããªããã©ã°ããç«ãŠãããšã§ããã® CID ãç¶æã§ããŸãã
ãã®ããã«ãIPFS 㯠BitTorrent ãš git ãè¶³ãããããªãã®ãå
¬éå°çšã®ãã¡ã€ã«çœ®ãå Žã«ãããã®ãšããã®ãããã£ãããšèŠããŠãããšæããŸãã
IPFS ã®é床
IPFS ã«ãããããšãã£ãŠãã¡ã€ã«ã®ããŠã³ããŒãã¯éãã¯ãªããŸãããããããããŒã«ã«ããè¿ããããã¯ãŒã¯ã«å¥ã®ãã¢ãçšæããããCDN ãPIN ãµãŒãïŒãã£ãã·ã¥ã»ãµãŒãã¹ïŒã䜿ãããšã§éãããããšã¯å¯èœã§ããIPFS ã®ã¡ãªããã¯ã誰ãããããã¡ã€ã«ãæã£ãŠããŠããããå¿ ãæ¢ãåºããããšããç¹ãšãããããŒããã·ã³ã§å ±æããŠãã䜿ã人ãå€ããã°å€ãã»ã©è² è·ãäžãã£ãŠãããã® 2 ç¹ã§ãã
忣åïŒP2PïŒã®ç¥è©±ã«ã忣åã«ãããšéããªããããããŸãã
忣åã«ãããšéããªããšããã®ã¯ãç¹å®ã®ç®ç·ã«ãããŠã¯æ£ãããã®ã§ãããæµãŸããç°å¢ãç¹ã«å åç·ãé²ãã§ããæ¥æ¬åœå ã«ãããŠã¯å¿ ãããéããªããšã¯èšããŸããã
ãBitTorrent ã䜿ããšããŠã³ããŒããæ©ããšèããã®ã«ãæã£ãããéããªãããšæããæ¹ãå€ãã®ã§ã¯ãªãã§ããããã
å®ã¯ IPFS ãåãã§ãã
ãŸããã¢ã¯ã»ã¹é »åºŠã®äœããã¡ã€ã«ã¯ãæ¢ãåºãã®ã«æéãããããŸãããããŠãèŠã€ãã£ãå Žåã§ãç¹å®ã®ãã¢ããããŠã³ããŒããããããããã®ãã¢ã®ãã·ã³ã»ã¹ããã¯ãåç·é床ã®åœ±é¿ããã€ã¬ã¯ãã«åããŠããŸããŸãã
éã«èšãã°ãåããããã¯ãŒã¯å ã®å¥ã®ãã¢ã«ãã¡ã€ã«ããã£ãå Žåã¯ãããŒã«ã«ã»ãããã¯ãŒã¯ã®é床ã§ãã¡ã€ã«ãããŠã³ããŒãã§ããããšã«ãªããŸããããã§ã倧ããªãã¡ã€ã«ã¯åå²ãããŠä¿åãããŠãããããHTTP ã FTP ãªã©ã®ãã¡ã€ã«ã®äžžããšããŠã³ããŒãã«æ¯ã¹ããšå£ã£ãŠããŸããŸãã
ããã§ã IPFS ã䜿ãã¡ãªããã¯ãçœå®³æå«ãã€ã³ãã©ã匱ãïŒåç·ãé ãã£ãããé«äŸ¡ãªãµãŒããŒããªãïŒãããã¯ãŒã¯ã§ããè² è·åæ£ã§ããããšã§ãã
ãŸããæã® IPFS ã®ãµã€ãã«ã¯ãA peer-to-peer hypermedia protocol to make the web faster, safer, and more open.ããšãã£ãèšèŒããã£ãã®ã§ããIPFS ã¯éãããšåéããããçµç·¯ãããããã§ãã誀解ãæãããçŸåšã¯åé€ãããŠããŸãã
ããã§èšã faster ãšã¯ãïŒCID ãããã£ãŠããã°ïŒãæ¢ãåºãã®ãæ©ãããšããæå³åãã§ããã€ãŸããæ¬²ãããã¡ã€ã«ãããã£ãŠããã®ã«ãã©ã®ãµãŒããŒã«ãããããããªãã®ã§ãæ¢ãã®ã«æéããããããšããåŸæ¥ã®åé¡ã«å¯ŸããŠããIPFS ãªã CID ããããã£ãŠããã°ãã©ã®ãµãŒããŒã«ãããã¯é¢ä¿ãªãããšããæå³ã§ faster ãšèšã£ãŠããã®ã§ãã
ããã BitTorrent ãš git ã§ããããã
è¯ããšæããŸããããããIPFS ã¯ãWEBïŒhttp/httpsïŒã®ä»£æ¿ãšãªã次äžä»£ãããã³ã«ããç®æããŠãããååã ãã§ãªãå
容ãéå¿çã§ãã
- ãã¿ããªã§å ±æããã°ãµãŒããããªãïŒé«è² è·ã«èãããµãŒããããªããŠãããïŒãããã
- ã
ã³ã³ãã³ãã® ID === hash(ã³ã³ãã³ãã®äžèº«)ãªã®ã§æ¹ç«ã®å¿é ãªããããã - ã誰ãã®ãã·ã³ã«ããŒã¿ãããã°ãæ¶ããããšãªããããã
- ã
httpsãšåãããã«ã³ã³ãã³ãèªäœãæå·åããŠããã°å ¬éãããã¯ãŒã¯ã§ããããããã
ãšãçŸåšã® Web ãµã€ããã€ã³ã¿ãŒãããã®å ¬éæ å ±ãæã€åé¡ïŒäŸãã°ããŒã¿æ¹ç«ã DNS æ¹ç«ãªã©ïŒããããã¡ã€ã«ã®ããã·ã¥å€ã䜿ãããšèšããã·ã³ãã«ãã€å€§èãªæ°äžä»£ã®æ å ±ãããã¯ãŒã¯ãäœãããšèšããã®ã§ãã
- InterPlanetary File System @ Wikipedia
- https://ipfs.io/ @ IPFS å ¬åŒãµã€ã
IPFS ãšããã®ä»ã®ãããã³ã«ã®éã
äœåºŠãèšåããŠããŸãããWeb ã«ããã HTTP ã FTP ãªã©ã®åŸæ¥ã®ãããã³ã«ãš IPFS ãæ ¹æ¬çã«éãã®ãã³ã³ãã³ããååŸããæŠå¿µã§ãã
- WebïŒHTTPïŒã®å Žåã¯ãã³ã³ãã³ãã®å Žæãæå®ããŠã³ã³ãã³ããååŸãããã€ãŸããã©ããããååŸããããéèŠã§ããã
- IPFS ã®å Žåã¯ãã³ã³ãã³ãã®äžèº«ïŒããã·ã¥å€ïŒãæå®ããŠã³ã³ãã³ããååŸãããã€ãŸãããªã«ããååŸããããéèŠã§ããã
ãã¡ããããã® IPFS ãããã³ã«ïŒä»æ§ïŒä»¥å€ã«ã HyperCore ãããã³ã« ã ICN ãªã©ã䌌ãã¢ã€ãã¢ã¯ããã倿°ååšããŸãã
ããããIPFS ã¯
- Wikipedia ãäžåœãªæ€é²ã®åé¿ã«äœ¿ã£ã
- Brave ãã©ãŠã¶ãæšæºã§ IPFS ãããã³ã«ã䜿ããããã«ãªã£ã
- Android ç Opera ãã©ãŠã¶ãæšæºã§ãµããŒãããŠãã
ãªã©ã«ãããæ³šç®ã济ã³ãŠããŸãã
äœãã ð
ãã®ãããæ°ããã³ã³ããæè¡ã®ãã¡ Docker ãäžåŒ·ã«ãªã£ãããã«ãå ¬é忣ãã¡ã€ã«ã·ã¹ãã ã® Docker çãªã¡ãžã£ãŒãªãã®ã«ãªãã€ã€ãããŸããïŒãã¶ããç¥ãããã©ïŒ
ã€ãŸããä»åŸã¯ãã©ãŠã¶ã®ã¢ãã¬ã¹ã« ipfs://<IPFSããã·ã¥å€> ãšæãŠã°ããã®ããã·ã¥å€ã®ãã¡ã€ã«ãæã£ãæå¯ãã®ããŒãïŒipfs ãç«ã¡äžããŠãããã·ã³ïŒããååŸãããããã«ãªãã®ã§ãããã®ãã¡ã€ã«ã HTML ã®å Žåã¯éç Web ãµã€ãã衚瀺ãããZIP ãªã©ã®ã¢ãŒã«ã€ãã®å Žåã¯ããŠã³ããŒããå§ãŸããšèšãããšã§ãã
å®éã« 2021/05/20 çŸåšã®æç¹ã§ Brave ãã©ãŠã¶ãã¢ãã€ã«ç Opera ãã©ãŠã¶ã¯æšæºã§å®è£ æžã¿ã§ãChromeã»Firefoxã»Edge ã¯æ¡åŒµæ©èœïŒã¢ããªã³ãã€ã³ã¹ããŒã«ããããšã§äœ¿ããããã«ãªããŸãã
- IPFS ã® URI äŸ:
-
ipfs://bafkreicnzih5l5beumnqhk4aps5oo7vtfpznbcpo2hhocvftv7wuldpa3q
ïŒBrave ãªã©ã®å¯Ÿå¿ãã©ãŠã¶ãããã¯ãã©ã°ã€ã³ãå ¥ã㊠URI ãéããŠã¿ãŠãã ããã"hello, world!" ãšã以äžã® URL ãšåãã³ã³ãã³ãã衚瀺ãããã¯ãã§ãïŒ -
https://ipfs.io/ipfs/bafkreicnzih5l5beumnqhk4aps5oo7vtfpznbcpo2hhocvftv7wuldpa3q
ïŒãã®https://ipfs.io/ipfs/ã«ã€ããŠã¯åŸè¿°ïŒ
-
IPFS ã®äœ¿ãåæ
ããŠãããããã Qiita çã« IPFS ã®ç骚é ã§ããã€ãŸããIPFS ã®äœ¿ããããã¯ãããã»ã©ã®ãã®ãããšãããšããã§ãã
IPFS èªäœã¯ãããã³ã«ãªã®ã§ããããã䜿ããããã«å®è£
ãããããã°ã©ã ãæäŸãããŠããã倧ãã GUI çãš CUI çãããŸãã
CLI ã§åããã CUI çã«ã¯ Go èšèªã§å®è£
ãã KuboïŒæ§ IPFSïŒ ãšãJavascript ã§å®è£
ããã js-ipfs ããããŸãã
ãã㊠CLI ãèŠæãªããGUI çã® IPFS ãã¹ã¯ãããçãããã©ãŠã¶ã®æ¡åŒµæ©èœããããŸãã
Brave ãªã©ã®ããã©ãŠã¶ã«ãã£ãŠã¯æšæºã§å®è£
ãããŠãããã®ããããŸããBrave ãã©ãŠã¶ã®å Žåãã¢ãã¬ã¹æ¬ã«ãbrave://ipfsããšæã£ãŠãéå§ããããã¿ã³ãæŒããšè¡šç€ºãããããã€ããŒããã§ããã¹ã¯ãããçãšåããã®ã衚瀺ãããŸãã
ãšã¯èšãããIPFS ã®ãã¹ã¯ãããçããšèšã£ãŠã Electron ããŒã¹ã§ã忢±ãããŠãã ipfs ã³ãã³ãïŒKuboïŒã®ãã«ãã€ã³ Web ãµãŒããŒã衚瀺ããŠããã ããªã®ã§ãã
å®ã¯ ipfs ã³ãã³ãïŒKuboïŒã¯ãã«ãã€ã³ Web ãµãŒããŒãå
èµããŠããã®ã§ããããã¯ããã衚瀺ããŠããã ããªã®ã§ãã
ãã©ãŠã¶ã®æ©èœæ¡åŒµã§ã¯ js-ipfsïŒJavascript å®è£
ïŒã䜿ãããIPFS Desktop ã§ã¯ãKuboïŒGo èšèªå®è£
ïŒã䜿ãããŠããçšåºŠã®èªèã§ããã§ãããããã㊠Electron ã®éããæ°ã«ãªã人㯠ipfs ã³ãã³ãã䜿ãããã«ãã€ã³ Web ãµãŒããŒã䜿ããšããã§ãããã
ããŠããã® ipfs ã³ãã³ãïŒKoboïŒã¯ Go èšèªã§æžãããŠããããããã«ãããããã€ããªã¯åäœã®ããã°ã©ã ãšããŠåããŸãã
- go-ipfs | Distributions @ IPFS
ã€ãŸããipfs.exe ã ipfs ã®ãã€ããªããã¹ãéã£ãå
ã«èšçœ®ããã ããªã®ã§ã䜿ãã®ã«ã¢ã¬ã³ã¬ãšã€ã³ã¹ããŒã«ããå¿
èŠããªãã®ã§ãã
ãã¡ãããæåã€ã³ã¹ããŒã«ãã¢ããããŒãã®æŽæ°ãé¢åãªäººã®ããã« brew ã choco ãªã©ã®ããã±ãŒãžãããŒãžã£ãŒçµç±ã§ã€ã³ã¹ããŒã«ãå¯èœã§ãããipfs-update ãšãã ipfs ã®ã€ã³ã¹ããŒã« & ã¢ããããŒãå°çšããŒã«ããããŸããããŠã³ããŒãããŠå®è¡ããã ãã§ã€ã³ã¹ããŒã«ãæŽæ°ãããŠãããŸãã
ããŠãCLI çïŒã³ãã³ãïŒã®äœ¿ãåæã§ãããgit ã«äŒŒãŠãããã®ã® git ããçŽæçã§ãã
å®éã«è§Šã£ãŠã¿ãã°ãããããããïŒããã§åãã®ïŒããšæãããšã§ãããã
以äžã®ã³ãã³ãã»ã©ã€ã³ã§ã®å®è¡äŸãã¶ããšã芧ãã ããã
$ ipfs --version
ipfs version 0.7.0
$ # ipfs ãªããžããªã®åæåãéåžž ~/.ipfs ã«äœæããããïŒå°çšã®ç§å¯éµïŒå
¬ééµããªã¯ãšã¹ããã
$ # ãã¡ã€ã«ã®ãã£ãã·ã¥ãªã©ã®çœ®ãå ŽïŒ
$ ipfs init
$ # ipfs ããŒã¢ã³ïŒåææ©èœïŒã®èµ·åãããã¯ã°ã©ãŠã³ãå®è¡ãšãã°åºåä»ããããã§ P2P ã® 1 ã€ã®
$ # ãã¢ãšããŠèµ·åããã
$ ipfs daemon > ipfs.log &
$ # ipfs ãããã¯ãŒã¯äžãããã¯ãªããžããªäžã«ãããã¡ã€ã«ãéãããããã¯ãŒã¯äžã«ãã£ãå Žåã¯ããªããž
$ # ããªã«ãã£ãã·ã¥ããã
$ ipfs cat bafkreicnzih5l5beumnqhk4aps5oo7vtfpznbcpo2hhocvftv7wuldpa3q
hello, world!
$ # æ°èŠãµã³ãã«ã»ããŒã¿ã®äœæïŒããŒã¿ã¯ããã¹ãã«éããç»åãªã©ã®ãã€ããªã§ãåé¡ãªãïŒ
$ echo 'Hello, Qiita!' > hello.txt
$ # ãªããžããªã«ããŒã¿è¿œå ã远å ããããŒã¿ã®ããã·ã¥å€ïŒCIDïŒãè¿ãããã
$ ipfs add hello.txt
added QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B hello.txt
14 B / 14 B [=== ... ===] 100.00%
$ # ãªããžããªå
ã®ããŒã¿ïŒCIDïŒã®å
¬éããã³éç¥ãæ»ãå€ã¯å
¬éããããŒãã® IDïŒIPNS ã® KeyïŒãšå
Ž
$ # ããå
容ã
$ ipfs name publish QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
Published to k51qzi5uqu5dloao8jzqletz2tz06su210ddl0hn7vwo5hoi1an40zs57wjh3y: /ipfs/QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
$ # å
¬éãããã¡ã€ã«ã®ç¢ºèªïŒä»ã®ãã·ã³ã§ç¢ºèªããŠãããïŒ
$ ipfs cat QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
Hello, Qiita!
$ # IPFS ãããã¯ãŒã¯ã HTTP ã«è»¢éããã²ãŒããŠã§ã€çµç±ã§ããã° cURL ã§ãååŸã§ãã
$ curl https://ipfs.io/ipfs/QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
Hello, Qiita!
$ # ããŒã¿ãå
¬éããéã«åŸãããŒãã® IDïŒIPNS ã® KeyïŒã§ã²ãŒããŠã§ã€çµç±ã§ cURL ããŠã¿ã
$ curl https://ipfs.io/ipns/k51qzi5uqu5dloao8jzqletz2tz06su210ddl0hn7vwo5hoi1an40zs57wjh3y
Hello, Qiita!
$ # ããŒã«ã«ã® HTTP ã²ãŒããŠã§ã€çµç±ã§ãã¡ã€ã«ãååŸïŒipfs ããŒã¢ã³ãç°¡æ Web ãµãŒãã®æ©èœã
$ # æã£ãŠããŸãïŒ
$ curl http://localhost:8080/ipfs/QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
Hello, Qiita!
äžèšã®ããã«ãæå€ã«ç°¡åã«å ¬é忣ãã¡ã€ã«ã·ã¹ãã ã䜿ããŠããŸããŸãã
éäžã§ https://ipfs.io/ipfs/<CID> ã https://ipfs.io/ipns/<Key> ã§ãã¢ã¯ã»ã¹ã§ããããšã«ãïŒãã£ïŒcurl ã wget ã§ã䜿ããã£ãŠãïŒïŒããšæãããããããŸããã
https://ipfs.io/ipfs/ 㯠IPFS ãããã¯ãŒã¯ã HTTPS ã«ã€ãªããã²ãŒããŠã§ã€ã® 1 ã€ã§ããèªåã§ã建ãŠãããŸãããCloudFlare ãªã©ã® CDN ãããã€ããŒã建ãŠãŠããŸãã
- ãªã³ã©ã€ã³ã§äžèšã®ã³ã³ãã³ãã衚瀺ããŠã¿ã
CDN ãéããšäœãè¯ãããšãããšããã£ãã·ã¥ãããŠããã° CloudFlare ã®é床㧠Web ãµãŒããŒã»ã¬ã¹ã§éçãã¡ã€ã«ãæäŸã§ãããšããããšã§ããã€ãŸãåŸè¿°ãã Raspberry Pi ã䜿ã£ãŠããªã PC ãªã©ã«ã³ã³ãã³ããçªã£èŸŒãã§ IPFS äžã§å ±æããŠã宿çã« URL ãå©ããŠããã°ãCDN ãéããŠæäŸã§ãããšããããšã§ãã
ãã¡ã€ã«ã®æŽæ°
è¥å¹²ã®åŸ©ç¿ã§ãããCID ã¯å®è³ªçã«ã³ã³ãã³ãã®å 容ã®ããã·ã¥å€ãªã®ã§ãã³ã³ãã³ãã®å 容ãå€ãããã³ã« CID ãå€ãããŸãã
ã€ãŸãããã®ã³ã³ãã³ãã® IDããšèšãããã¯ããã®ã³ã³ãã³ãã®çïŒããŒãžã§ã³ïŒã® IDããšãã衚çŸã䌌åããããããŸãããgit ã§èšããšããã®ã³ããã IDïŒCIDïŒããDocker ã§èšãã€ã¡ãŒãžã¬ã€ã€ãŒã®ããã·ã¥å€ïŒImage IDïŒãšåãã§ãã
ããã«ããããŒã¿ã®äžææ§ãå¢ãã®ã§ãããéã«ããŒã¿ã®å å®¹ãæŽæ°ããŠå ±æãããå Žåã«ã¯ CID ã¯é©ããŸãããäœããæŽæ°ãããã³ã«æ°ãã CID ãçžæã«äŒããªããšãããªãããã§ãã
ãã®åé¡ã解決ããæ¹æ³ã® 1 ã€ã IPNSïŒInterPlanetary Name SystemïŒã§ãã
IPNS ãšã¯
IPNSïŒInterPlanetary Name SystemïŒã¯ãååã« CID ãçŽã¥ããä»çµã¿ã
ãããæŽ»çšããŠãã£ã¬ã¯ããªãçŽã¥ãããšã³ã³ãã³ããæŽæ°ããŠãå€ãããªãäžæã®ã¢ãã¬ã¹ãäœãããšãã§ããã
IPNS ãå®å
šã«çè§£ããæ°ã«ãªãããã«ã¯ ipfs name ã³ãã³ãã¯äœãããã®ãçè§£ããªããšãããŸããããªã name ãªã®ãããšã
ð  説æãé·ã£ããããã®ã§ãIPNS 㯠IPFS ã® PKI ã®åå空éã§ãããŒãã®å ¬ééµã®ããã·ã¥å€ãååïŒKeyïŒã«ãCID ãšãããŒãã®ç§å¯éµã«ãã CID ã®çœ²åãšãå ¬ééµã Value ã«ããŠç©ºéã«èšçœ®ãããã£ã¬ã¯ããªã CID ã«ããããšã§ãã£ã¬ã¯ããªå ã®è€æ°ãã¡ã€ã«ãå ±æã§ããããšèšãããŠãã³ãšãããã£ãã¡ããã¯æ¬¡ã®ç« ã«é²ãã§ãã ãããç§ã«ã¯äœãèšã£ãŠãããããããªãã£ãã®ã§ããã®ç« ã§ã¯ããããããªãååŒ
ãããã ããªãã説æããŸãã
ãŸãã¯å ·äœçãªåããèŠãªããéç®ããŠïŒçŽè§£ããŠïŒãã£ãæ¹ããã¡ãã£ãšã§ãããããã«ã¯çè§£ã§ããããªãšæããŸãã
ã³ã³ãã³ããç»é²ããŠããã® CID ãå
¬éãããšãæçµçã« 2 ã€ã®ããã·ã¥å€ãåŸãããŸããâ /ipfs/Qm ããå§ãŸãããã·ã¥å€ãšãâ¡ k5 ããå§ãŸãããã·ã¥å€ã§ãã
äžèšãã°ã®ãipfs add ã³ãã³ããš ipfs name publish ã³ãã³ãã§åŸãããåã
ã®ããã·ã¥å€ã«æ³šç®ãã ããã
$ # ã³ã³ãã³ãã®ç»é²ïŒããŒã¿ããªããžããªã«è¿œå ããã®ããã·ã¥å€ã確èªã§ããïŒ
$ ipfs add hello.txt
added QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B hello.txt
14 B / 14 B [=== ... ===] 100.00%
$ # 远å ãããªããžããªå
ã®ããŒã¿ã®å
¬éãæ»ãå€ã¯ã³ã³ãã³ãã® IPNS ã® Key ãšã³ã³ãã³ãã® IPFS URI
$ ipfs name publish QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
Published to k51qzi5uqu5dloao8jzqletz2tz06su210ddl0hn7vwo5hoi1an40zs57wjh3y: /ipfs/QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
2 ã€ç®ã®ã³ãã³ãå®è¡çµæã«ãããæåã k5 ããå§ãŸãããã·ã¥å€ã§ãããããã IPNS ã®ä»çµã¿ã ãã§ãªã IPFS ã® P2P ãããã¯ãŒã¯ãæ§ç¯ãããäžã§éèŠãªåœ¹å²ãæãããŸãã
CID ããäœk5 ããå§ãŸãããã·ã¥ã¯ã誰
ipfs name publish ã®ã³ãã³ãã®æå³ããããå°ãæãäžããŸãããã
ipfs name publish QmSuy...äžç¥...fy5B
äžèšã³ãã³ãã¯ãæ¥æ¬èªã ãš
ããã®ããŒãã®åQmSuy...äžç¥...fy5B ãå
¬éipfs!ã
ãšããæå³ã«ãªããŸãã
ãããŠãå®è¡çµæã¯ä»¥äžã®ããã«ãªããŸãã
Published to k51qz...äžç¥...jh3y: /ipfs/QmSuy...äžç¥...fy5B
äžèšã¬ã¹ãã³ã¹ã¯ãk51qz...äžç¥...jh3y ã« /ipfs/QmSuy...äžç¥...fy5B ãå
¬éããŸããããšããæå³ã«ãªããŸãã
IPFS äžã®åã
ã®ãã¢ã¯ãname ãšåŒã°ããæ
å ±ã®ãã£ãŒã«ãïŒé
ç®ïŒãæã£ãŠããŸãããã®å€ã¯ãåããŒãã®å
¬ééµãããã·ã¥åããå€ã§ããããäžèšã® k5... ããå§ãŸãå€ã§ãããããŠããã®å€ãããŒãã® ID ã«ãªããŸãã
äžèš Published to ... ãšããã¬ã¹ãã³ã¹ã¯ãå³å¯ã«ã¯ãããŒã ID k51qz...äžç¥...jh3y ã®ç§å¯éµã§ /ipfs/QmSuy...äžç¥...fy5B ã眲åããŠãä»ã®ããŒãã«å
¬éããŠããæšãéç¥ããŸããããšããæå³ã«ãªããŸãã
éã«èšããšãããŒãå k51... ã«ã¢ã¯ã»ã¹ãããšããã®ããŒããå
¬éããŠããïŒçœ²åãããïŒãã¡ã€ã«ã«ã¢ã¯ã»ã¹ã§ãããšããããšã§ããããŸãã
ããã IPN/ipns/k51qz...äžç¥...jh3y ã§ãååŸã§ããçç±ã§ããïŒè©³ããã¯åŸè¿°ïŒ
ãã®ããã«ãç¹å®ã® IPFS ããŒãããããŒã¿ãåŒãåºãããã«äœ¿ããããããipns ã§æå®ããããŒã IDïŒnameïŒ ã®å€ã¯ Key ãšåŒã°ããŸãã倿°ã ValueïŒäŸ¡å€ïŒãåŒãåºãããã« Key ãæå®ãããããªãã®ã§ãã
æŠå¿µãããå ·äœçãªæµãã§èŠãŠã¿ãŸãããããçè§£ããããšããããã¯ããã£é£ã°ããŠæ§ããŸããã
ãã® Key ã䜿ã£ãŠãã²ãšå·¥å€«ãããšã³ã³ãã³ããæŽæ°ãããŠãå€ãããªãã¢ãã¬ã¹ãäœæã§ããŸããå
ã«ãã²ãšå·¥å€«ãã®çããèšã£ãŠããŸããšããã£ã¬ã¯ããªãå
±æãããããšã§ãã
ãã®ãã²ãšå·¥å€«ãã®åã«ãå ã»ã©å ¬éããã³ã³ãã³ãã«ã¢ã¯ã»ã¹ããŠã¿ãŸããããå®éã®åäœãèŠãããšã§ã埩ç¿ããããŠãããæ£ç¢ºã«çè§£ã§ããŸãã
ãŸã㯠CID ã䜿ã£ã /ipfs/<CID> ã§ã¢ã¯ã»ã¹ããæ¹æ³ãšãIPNS ã䜿ã£ã /ipns/<Key> ã§ã¢ã¯ã»ã¹ããæ¹æ³ã§ããã©ã¡ããåãå
容ãè¿ã£ãŠæ¥ãŸãã
$ # IPFS ã® CID ã§ã¢ã¯ã»ã¹
$ curl https://ipfs.io/ipfs/QmSuyo747aBeA4yzXy354VUH3Z3pUBC3rULAQ5oF62fy5B
Hello, Qiita!
$ # IPNS ã® Key ã§ã¢ã¯ã»ã¹
$ curl https://ipfs.io/ipns/k51qzi5uqu5dloao8jzqletz2tz06su210ddl0hn7vwo5hoi1an40zs57wjh3y
Hello, Qiita!
次ã«ãåãæé ã§åããã¡ã€ã«ãæŽæ°ïŒå
å®¹ãæžãæãïŒããŠãå床å
¬éããŠã¿ãŸããã€ãŸããipfs add ã§ CID ãçºè¡ããã®ã¡ããã® CID ã ipfs name publish ã§å
¬éããŸãã
ãã®æãPublished to ã®ååã® k5 ããå§ãŸãããã·ã¥å€ïŒKeyïŒã¯å€ãããªãããšã«æ³šæããŸãã
$ # ã³ã³ãã³ãã®å€æŽïŒå
å®¹ã®æžãæãïŒ
$ echo "Hello, I'm KEINOS!" > hello.txt
$ # 倿Žã³ã³ãã³ãã®ç»é²
$ ipfs add hello.txt
added Qme36EKDmxfnhWhFcZQ7pZUnoCLCinxNShS66JwM7z4Fvx hello.txt
19 B / 19 B [=== ... ===] 100.00
$ # 倿Žã³ã³ãã³ãã®å
¬éïŒæŽæ°ã®åæ ïŒ
$ ipfs name publish Qme36EKDmxfnhWhFcZQ7pZUnoCLCinxNShS66JwM7z4Fvx
Published to k51qzi5uqu5dloao8jzqletz2tz06su210ddl0hn7vwo5hoi1an40zs57wjh3y: /ipfs/Qme36EKDmxfnhWhFcZQ7pZUnoCLCinxNShS66JwM7z4Fvx
ãããŠåæ§ã«ãå
¬éãããã³ã³ãã³ãã cURL ã§ç¢ºèªããŠã¿ãŸããIPNSïŒ/ipns/<key>ïŒ ã§ã¢ã¯ã»ã¹ããæ¹ã¯ Key ã®å€ãå€ãã£ãŠããªãããšã«æ³šç®ããŸãã
$ # IPFS ã® CID ã§ã¢ã¯ã»ã¹ïŒå
容ãå€ãã£ãã®ã§ãåœç¶ CID ãå€ããïŒ
$ curl https://ipfs.io/ipfs/Qme36EKDmxfnhWhFcZQ7pZUnoCLCinxNShS66JwM7z4Fvx
Hello, I'm KEINOS!
$ # IPNS ã® Key ã§ã¢ã¯ã»ã¹ïŒå
容ãå€ãã£ãã®ã« Key ã¯å€ãã£ãŠããªãïŒ
$ curl https://ipfs.io/ipns/k51qzi5uqu5dloao8jzqletz2tz06su210ddl0hn7vwo5hoi1an40zs57wjh3y
Hello, I'm KEINOS!
ã©ã¡ããåã倿Žãããå
容ã«ãªããŸãããã€ãŸã /ipns/<Key> ã䜿ããšåãã¢ãã¬ã¹ã䜿ããããšãããããŸããã
ãããã1 ã€èœãšã穎ããããŸãã
ãå¥ã®ãã¡ã€ã«ãšå
容ãã§ãåãããã«ç»é² & å
¬éããŠã¿ãŸããããä»åºŠã¯ãã¡ã€ã«åã hello.txt ãã greetings.txt ã«å€ããŠãå
容ã¯å®çªã® "Hello, world!" ã«ããŠã¿ãŸãã
$ echo "Hello, world!" > greetings.txt
$ ipfs add greetings.txt
added QmeeLUVdiSTTKQqhWqsffYDtNvvvcTfJdotkNyi1KDEJtQ greetings.txt
14 B / 14 B [=== ... ===] 100.00%
$ ipfs name publish QmeeLUVdiSTTKQqhWqsffYDtNvvvcTfJdotkNyi1KDEJtQ
Published to k51qzi5uqu5dloao8jzqletz2tz06su210ddl0hn7vwo5hoi1an40zs57wjh3y: /ipfs/QmeeLUVdiSTTKQqhWqsffYDtNvvvcTfJdotkNyi1KDEJtQ
åœç¶ã®ããã« CID ã¯å€ãã£ãã®ã§ãããKey ã¯å€ãã£ãŠããŸããã
ããã©ã人ã¯ãïŒããããªãã»ã©ïŒããšããæ°ã¥ããããããŸãããé
æ©éãæ°èŠå ¬éã³ã³ãã³ãã«ã¢ã¯ã»ã¹ããŠã¿ãŸãããã
$ # IPFS ã® CID ã§ã¢ã¯ã»ã¹ïŒCID ãå€ãã£ãããåœç¶å
容ãå€ããïŒ
$ curl https://ipfs.io/ipfs/QmeeLUVdiSTTKQqhWqsffYDtNvvvcTfJdotkNyi1KDEJtQ
Hello, world!
$ # IPNS ã® Key ã§ã¢ã¯ã»ã¹ïŒKey ã¯å€ãã£ãŠããªãããå
容ãå€ãã£ãïŒ
$ curl https://ipfs.io/ipns/k51qzi5uqu5dloao8jzqletz2tz06su210ddl0hn7vwo5hoi1an40zs57wjh3y
Hello, world!
ãªããšãå
ã»ã©ã® Hello, I'm KEINOS! ãäžæžããããŠããŸããŸããïŒ
ã€ãŸããã¿ãŒã²ãããšãªããã¡ã€ã«ã¯é¢ä¿ãªã IPNS ã® Key ã§ã¢ã¯ã»ã¹ã§ããã®ã¯æåŸã«ç»é²ããã CID ã®ã¿ãšããããšã§ãã
1 ããŒãžãã®ã®éç Web ããŒãžãå ¬éãããªãè¯ãã®ã§ãããããã§ã¯è€æ°ãã¡ã€ã«ã«ã¯äœ¿ããŸãããããšãã£ãŠãã³ã³ãã³ãããšã«å¥ã® IPFS ããŒãïŒIPFS ã®ããŒã¢ã³ïŒãçšæããã®ãéåçã§ãã
å®ã¯ããã® Key ã®å€ã¯çŸåšã®ãããŒãã®å
¬ééµKey ã®å€ã¯å€ãããªãã£ãã®ã§ãã
$ ipfs name publish <CID>
Published to <Key>: /ipfs/<CID>
IPNS ã® NS 㯠Name System ãšã¯èšããã®ã®ãã©ã¡ãããšèšããš Name Space ã® SystemïŒåå空éã®ä»çµã¿ïŒãšèãããšãã£ããããŸãã
IPFS ãããã¯ãŒã¯ã«ã¯ IPNS ãšããåå空éãããããã® Key ã®ããã·ã¥å€ããããŒãã®ååïŒnameïŒããšããŠäœ¿ããŸãã
ãããŠãåã
ã® name 㯠Key-Value åã®é£æ³é
åã®ããã«ãªã£ãŠãããå€ïŒValueïŒã¯ 3 ã€ã®èŠçŽ ã§æ§æãããŠããŸãã
- ããŒãã®å ¬ééµ
- CID
- CID ãããŒãã®ç§å¯éµã§çœ²åããèšŒææž
ã€ãŸã ipfs name publish <CID> ãšããã®ã¯ããã³ã³ãã³ãã®å
¬éããšèšãããã¯ãå³å¯ã«ã¯ãã³ã³ãã³ãã眲åãã name ã®å
¬éããªã®ã§ãã
å
·äœçã«ã¯ãipfs name publish <CID> ãå®è¡ãããšãããŒãïŒnameïŒã®ãç§å¯éµãã§ CID ã眲åã㊠IPFS ãããã¯ãŒã¯ã«å
¬éïŒpublishïŒããããšããã³ãã³ããªã®ã§ãã
ããã /ipns/<Key> ã§ã¢ã¯ã»ã¹ãããšäžæžããããŠããŸãåå ã§ããipfs name publish ã«ãã£ãŠèšŒæããŠãã CID ãå€ãã£ãŠããŸã£ãããã§ãã
ããã§ããã£ããèœã¡çããŠãè€æ°ã® CID ãå ¬éãããå Žåãèãããšã2 ã€ã®æ¹æ³ãèããããŸãã
-
ipfs name publishããéã«è€æ°ã® CID ãæå®ããã - ã³ã³ãã³ãããšã«æ°ããå ¬ééµãšç§å¯éµã®ãã¢ãäœæããŠäœ¿ãã
åè
ã¯ããã£ã¬ã¯ããªã«è€æ°ã³ã³ãã³ããå
¥ããŠããããã£ã¬ã¯ããªã ipfs add ããããšã§ããŸãšã㊠1 ã€ã® CID ã«ã§ããŸãããŸãã1 ã€ã®éµã®ãã¢ã§æžãããã管çãæ¥œã«ãªããŸãã
ããããå
šãŠãåãã°ã«ãŒãïŒãã£ã¬ã¯ããªïŒã«ãªã£ãŠããŸããããç°ãªãå
容ãå«ããŠããŸããšããã¡ã€ã«ããã£ã¬ã¯ããªæ§æãç
©éã«ãªããšãããã¡ãªããããããŸããïŒã¡ãªã¿ã«ããã£ã¬ã¯ããªäžã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ããã«ã¯ /ipns/<Key>/<ãã¡ã€ã«å> ãšãã¡ã€ã«åã§ã¢ã¯ã»ã¹ã§ããŸãïŒ
åŸè ã¯ã管çã¯ç ©éã«ãªããŸãããåè ã®ããã£ã¬ã¯ããªãã®ä»çµã¿ãšçµã¿åããããšãå 容ã®ã°ã«ãŒãããšã«éµã®ãã¢ãäœæããŠããã°ããã¡ã€ã«ããã£ã¬ã¯ããªæ§æã綺éºã«ãªããšããã¡ãªããããããŸãã
ð ã¡ãªã¿ã«éµã®ãã¢ãäœæããã³ãã³ãã¯
ipfs key genã§ãã詳ããã¯ipfs key --helpãã芧ãã ããã
Web3.0 æä»£ã® Web ãµãŒãã建ãŠãã« Web ãµãŒãã建ãŠã
ãã®ãipfs name publish ã«ãããã£ã¬ã¯ããªã®å
¬éããCDN ãšåŸæ¥ã® DNS ã®ä»çµã¿ã«çŽã¥ããã°ãå
¬é Web ãµãŒãã建ãŠãªããŠãé«ããã©ãŒãã³ã¹ã® Web ãµãŒãã建ãŠãããšãã§ããã®ã§ãã
ã建ãŠãªããŠã建ãŠãããããšããäœãèšã£ãŠããã®ããšæããããããŸããã
å ã«äžèšã§èšã£ãŠããŸããšãHTTP ã²ãŒããŠã§ã€èªäœã Web ãµãŒããŒã ãããã§ãã
ã€ãŸããå ¬éãããã³ã³ãã³ãã® IPFS ããŒãããç«ã¡äžããŠããã°ãHTTP ã²ãŒããŠã§ã€çµç±ã§ã¢ã¯ã»ã¹ã§ããã®ã§ãããããŠãHTTP ã²ãŒããŠã§ã€ã CDN ã§ããã°ã2 床ç®ä»¥éã®ã¢ã¯ã»ã¹ã¯ãã£ãã·ã¥ãããã®ã§ãèªåã®ããŒãã®è² è·ãæžãããŸãã
äœã¯ãšããããWikipedia è±èªçã® 2016 幎ã®ã¹ãããã·ã§ãããã芧ãã ãããipfs.io cloudflare-ipfs.com ã©ã¡ãã® HTTP ã²ãŒããŠã§ã€ããã§ãã¢ã¯ã»ã¹ã§ããåãå
容ãåç
§ã§ããŸãããã©ã®ããŒãã«ãã£ãã³ã³ãã³ããã¯ããããªãããšã«æ³šç®ã§ãã
-
ipfs://QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki
ãšã¯èšããéçããŒãžã ã ... CID å©ããŠãã ãã ã ... ãŸããããã ããããšããæãã§ãããã
ãã¯ãããã¡ã€ã³äŸåã®æã
ãããããšä¿ºæ§ãã¡ã€ã³ipns/<KEY> ãå
¬éããããªããŸãã
äŸãã°ã俺æ§ãã¡ã€ã³ã® https://oresama.sample.com/ ã«ã¢ã¯ã»ã¹ãããš /ipns/<MyKey>/ ã§å
±æããŠãã俺æ§ãã£ã¬ã¯ããªãåç
§ãããããšãã£ãããšã§ãã
åŸè¿°ããŸãã IPFS ããŒã㯠RaspberryPi Zero ã§ã建ãŠãããŸãããŸããåè¿°ããããã« IFPS ããŒã¢ã³ã¯æšæºã§ HTTP ã²ãŒããŠã§ã€ïŒIPFS â HTTPïŒãæã£ãŠããã®ã§ãèªå® ã®ã«ãŒã¿ãŒèšå®ã§ä¿ºæ§ IPFS ããŒãã« HTTP ããŒããåããŠè§£æŸããŠãDynamic DNS ããŒã«ãªã©ã䜿ãã°å ¬éã§ããŸãã
ãããããã® HTTP ã²ãŒããŠã§ã€ãå ¬éããŠå ±æããã®ã¯æãªããã®èªé¯ïŒèªå® ãµãŒãïŒã®æ¹æ³ã§ãã
ã€ãŸããã«ãŒã¿ã®èšå®ãèªé¯ã®ããã©ãŒãã³ã¹ãåãããäœããäžç¹å®å€æ°ãèªå® ã®ã«ãŒã¿ãŒçµç±ã§ã¢ã¯ã»ã¹ããŠããããé¿ããããã®ã§ãã
HTTP ã®äžçã«ãããŠãã¢ã¯ã»ã¹éå€ãäžæ£ãªã¢ã¯ã»ã¹ãé²ã 1 ã€ã®æ¹æ³ã CDN ãå©çšããããšã§ããããã俺æ§ããŒãã®ã²ãŒããŠã§ã€ïŒåºå ¥ãå£ïŒãšããŠæŽ»çšããã®ã§ãã
ã€ãŸããããã³ããšã³ãã CDN ã«èšå®ããããšã§ãèªåã®ããŒãã«ãªã¯ãšã¹ãããã®ã¯ CDN ã ãã«çµããããã£ãã·ã¥ã»ãµãŒããŒãšããŠåãã®ã§èªåã®ããŒãã®è² è·ã¯æžããŸããã€ãŸããã©ãºã〠Zero çšåºŠã®ãã·ã³ã§ãããµãŒããŒã建ãŠãããã®ã§ãã
ãïŒããããµãŒãå ¬éããŠããããwwwïŒããšæããããããŸããã... ... 確ãã«ã
ã§ããèªå® ã§ã¯ IPFS ã®ããŒãã ãã§ãå€éšã« HTTP ã®ããŒããå ¬éããŠããªãããšã«æ³šç®ã§ãã
CloudFlare ãäŸã«ãããšã以äžã®ãããªèšå®ãããŸãã
- 俺æ§ãã¡ã€ã³ã® DNS èšå®
-
CNAMEã CloudFlare ã® HTTP ã²ãŒããŠã§ã€ã«åããïŒcloudflare-ipfs.comïŒ -
TXTã«dnslink=/ipns/<MyKey>ã远å ãã- åè: Connecting Your Website | IPFS Gateway @ developers.cloudflare.com
-
ããã ãã§ãhttps://mydomain.com/sample.html ãšã¢ã¯ã»ã¹ããã£ãå Žåãhttps://cloudflare-ipfs.com/ipns/<MyKey>/sample.html ã«ã¢ã¯ã»ã¹ããå Žåãšåãã«ãªããŸãããã㊠CloudFlare 㯠ipns/<MyKey> ãå
±æããŠãã sample.html ãååŸ & ãã£ãã·ã¥ã衚瀺ããŸãã
ãã®ä»çµã¿ã DNSLink ãšèšããŸãã
ãã®æã®ãã€ã³ãã¯ãä¿ºæ§ IPFS ããŒãããããããã¯ãŒã¯ã®ã«ãŒã¿ã®èšå®ããããå¿ èŠãïŒåºæ¬çã«ïŒãªãããšãšãäžåºŠã¢ã¯ã»ã¹ããã° CloudFlare ã ãã§ãªã IPFS ããŒãããèªå® ãŸã§ã®äžéã® IPFS ããŒãã«ãã£ãã·ã¥ãããããšã§ãã
ã€ãŸããäœãã¹ããã¯ã®ãã·ã³ã§ãå°çšæ©ã«ãããªã IPFS ããŒã¢ã³ãååèµ°ãããããšãã§ããŸãã
äœãããCloudFlare çµç±ã® HTTP æ¥ç¶ã§ãªããŠã IPFS 察å¿ã®ãã©ãŠã¶ãªã©ã§ /ipns/<MyKey>/sample.html ãšã¢ã¯ã»ã¹ããéã CloudFlare ã®ããŒãã®ãã£ãã·ã¥ã䜿ã£ãŠããããªã©ããããšãåãã§ãã
ãïŒã§ãéçããŒãžã®ã¿ã§åçããŒãžã®ã³ã³ãã³ãã¯å ¬éã§ããªããããïŒããšæããããããŸãããããããæ¹ã¯ WebAssembly ãæãäžããŠã¿ãŠãã ããã
å€éšã«åãããµãŒãã建ãŠãªããŠãã³ã³ãã³ããå ¬éã§ãããã® IPFS ã®ä»çµã¿ãããäœãè²ã ãšèŠããŠæ¥ãã®ã§ã¯ãªãã§ããããã
ããã«ããã® IPFS ã®æè¡ãšãåŸè¿°ãããããã¯ãã§ãŒã³ãšçµã¿åããããªã©ããªãããªãè²ã ãªæè¡ïŒããã·ã¥ã¢ããïŒãç£ãŸããããšããŠããŸãã
ãããããã£ã ã»ããŒããŒãºïŒãªãŒããã®èšããã»ãã³ãã£ãã¯ã»ãŠã§ããããã㯠Web 3.0 ã®æä»£ãæ¥ã€ã€ããããã§ãããã¶ããç¥ãããã©ã
ãã©ã€ããŒã㪠IPFS ãããã¯ãŒã¯
IPFS ã¯ãåºæ¬çã«å ¬éææžåãã®ãããã¯ãŒã¯ãšããŠå§ãŸã£ãã®ã§ããããã¯ãããã©ã€ããŒããªåæ£ãã¡ã€ã«ã·ã¹ãã ãšããŠäœ¿ãããããšæããããããŸããã
åºæ¬çã«ã¯å¯èœã§ããããã©ã€ããŒã IPFS ã¯ãã©ã¡ãããšèšããšããã·ã¥ã®è©±ããããæå·å¯ãã®è©±ããªã®ã§å²æããŸãã 3 è¡ã§èª¬æããŸãã
- IPFS ã®ãªããžããªïŒ
.ipfsïŒçŽäžã«å ±ééµã眮ããšéä¿¡ãæå·åããããšãã§ããã - åãå ±ééµãæã€ïŒèšçœ®ããïŒãã¢å士ã§ä»®æ³çãªãããã¯ãŒã¯ãäœãããïŒHTTPS ã VPN ãšäŒŒãçºæ³ïŒ
- å ±ééµã¯ ipfs-swarm-key-gen ã³ãã³ãã§äœæããã
- åèæç®: IPFS Tutorial: Building a Private IPFS Network with IPFS-Cluster for Data Replication @ eleks
IPFS ã¯ã©ãºã〠Zero(W) ã§ãåã
ãïŒIPFS 詊ããŠã¿ãããã©ãããŒã«ã«ã«å
¥ããã«ã¯ãããããèºèº
Linux ãš SSH æ¥ç¶ã®ç¥èãå¿ èŠã§ãããIPFS å°çšæ©ã«ãã¥ãŒãã³ã°ããã°ååã«äœ¿ããŸãã
- äž»ãªãã¥ãŒãã³ã°å
容
- GUI ãªã (RaspberryPi OS Lite)
- è§£å床äœã
- GPU ã¡ã¢ãªå²ãåœãŠå°ãªã
- ã¹ã¯ãããµã€ãº 2GB
GitHub ã« IPFS ã®ã€ã³ã¹ããŒã«ãšã¢ã³ã€ã³ã¹ããŒã«ã®ã¹ã¯ãªããã眮ããŠãããŸãã®ã§ããããããã°ã芧ãã ããã
- IPFS Installer for RaspberryPi Zero W | IPFS-RPi-Zero @ GitHub
- åèè³æ
- IPFS ã® Qiita èšäº @ Qiita ã«ããŽãª
- IPFS å ¥é @ decentralized-web.jp
- Raspberry Pi Zero W ã®äŸ¡æ Œ @ ã¹ã€ããã»ãµã€ãšã³ã¹
- ãããã¬ã¹ RaspberryPi ZeroW ã®ããŒããã£ã¹ã¯äœæïŒWi-Fi èšå®æžã¿ SSH æå¹æžã¿ïŒãšèšå® @ Qiita
- QiiCipher | GitHub äžã®å ¬ééµã䜿ã£ãŠãã¡ã€ã«ã®æå·åãšçœ²å確èªãããŒã«ã«ã®ç§å¯éµã§åŸ©å·ã眲åãããã·ã§ã«ã»ã¹ã¯ãªãã @ GitHub
ããã·ã¥é¢æ°ãšãããã¯ã»ãã§ãŒã³ã®é¢ä¿
- ãããã¯ãã§ãŒã³ã®ä»åç£æ¥
- 忣åã®è¿œèšå°çšããŒã¿ããŒã¹ã§ããã
- æ¢åããŒã¿ã®å€æŽïŒæ¹ããïŒé²æ¢ã¯ãäžæžãçŠæ¢ãšãã£ãèšå®ãéçšã§ã¯ãªããä»çµã¿ãã®ãã®ã§è¿œèšããã§ããªãããã«ãªã£ãŠããã
- 忣åããã³æ€èšŒãžã®è²¢ç®ã«ã€ã³ã»ã³ãã£ããèšããããšã§ãããŒã¿ã®æ°žç¶åãæåŸ ã§ããã
ããŠãã¡ããã¡ããåºãŠãããä»®æ³éè²šïŒæå·è³ç£ïŒã§æåãªãããã¯ã»ãã§ãŒã³ã§ããããã®ä»çµã¿ã®ããŒã¹ã«äœ¿ãããŠããã®ãããã·ã¥é¢æ°ã§ãïŒããã·ã¥é¢æ°ã®ç¹åŸŽã«é¢ããŠã¯åè¿°ã®ãããã·ã¥é¢æ°ã®åºæ¬ãšç¹åŸŽãåç §ïŒã
ãããã¯ã»ãã§ãŒã³ããæããã«äžèšã§è¡šããšãå®è³ªçã«å€æŽãæ¹ç«
ãããã¯ãäžåºŠæžã蟌ãã ã倿Žã§ããªãã远èšãšèªã¿åãå°çšã®ããŒã¿ããŒã¹ãã§ãã
倿Žãè¡ãããå Žåã¯ãäœæ°å°åž³ãéè¡ã®å£åº§ãªã©ãšåãã§ã远èšã«ãã調æŽãããŸããäŸãã°ã7 ãšããããŒã¿ã 5 ã«å€æŽã»ä¿®æ£ãããå Žåã¯ã-2 ãšããããŒã¿ã远å ããŠèª¿æŽããŸãã
ãã®è¿œèšåã®èšé²æ¹åŒããå°åž³ããšåŒã³ãŸãããããã¯ã»ãã§ãŒã³ãã忣åå°åž³
ã€ãŸããäžåºŠæžã蟌ãã ããŒã¿ã¯èªã¿åãå°çšã«ãªããšããæ©èœèªäœã¯ãCD-R ã®ãããªã35 幎以äžåãããã WORM (Write once read many) ãšå€ããããããŸããã
ãããŠã忣åãã®ã³ã°ã»ã·ã¹ãã ããšåŒã°ããªãã®ã¯ããã®ãã°ïŒèšé²ïŒã«ãçŽä»ãããããŒã¿ã®ããã·ã¥å€ããèšé²ããããšã§å€éšããŒã¿ãšã®çŽä»ããè¡ããããã§ãã
ããããããïŒããã·ã¥å€ã«ããããŒã¿ã®çŽä»ãïŒããããã¯ãã§ãŒã³ã«ãããããã·ã¥é¢æ°ã®ãã¢ã§ã¯ãããŸããã忣åã§çŽä»ãåŒã«ç¹åãã DB èªäœã¯ etcd ãªã©ã«ä»£è¡šããã KVS ãããããã§ãã
åŸè¿°ããŸãããå®è³ªçã«å€æŽãæ¹ç«
ãããã¯ãã§ãŒã³ãšgit
ããŠã倿Žãç©ã¿äžããŠãããšããæå³ã§ããgitïŒåæ£åããŒãžã§ã³ç®¡çã·ã¹ãã ïŒãªã©ãšåãã倿Žå±¥æŽã® DBãã®äžçš®ãšèãããšè¯ãã§ãããã
ãããããããã¯ãã§ãŒã³ã®å Žåã¯ãgit ãªã©ã®ããã« --amend ãšæºæ
ãŸãã忣å
ããã git ãšçå±ã¯äŒŒãŠããŸãã
ãªã¢ãŒãã»ãªããžããªãçŽæ¥åç
§ããã®ã§ã¯ãªãããŠãŒã¶ãŒã¯åæãããããŒã«ã«ã»ãªããžããªãåç
§ãã倿Žã¯ãªã¢ãŒãã»ãªããžããªã«ãªã¯ãšã¹ãããŠãç¡äºããŒãž
ããŒãžïŒå€æŽã®è¿œèšïŒã§ãããgit ã®å ŽåãããŒãžæš©éãæã€ã®ã¯ãªããžããªã®ãªãŒããŒããæš©éããã€ã³ã©ãã¬ãŒã¿ãŒã§ãã
ãããã¯ãã§ãŒã³ã®å Žåã¯ãåå ããŠããããŒãã®ãã¡ããªãŒããŒããšåŒã°ããããŒãã远å ã®åŠçã代衚ããŠè¡ããŸãïŒãªãŒããŒã¯å€æ°æ±ºã«ããé©å®æ±ºãŸããŸãïŒããããŠä»ã®ããŒãã¯ããªãŒããŒã® DB 倿Žã«è¿œéããŠãããŒã«ã«ã® DB ãåç §ããŸãïŒããŒããšã¯ãããã§ã¯ DB ã管çããŠãããã·ã³ãæããŸãïŒã
ãŸããããŒãžåã®è¿œèšå
容ã®ç¢ºèªïŒã¬ãã¥ãŒïŒã§ãããgit ã®å Žåã¯ãããŒãžæš©éãæã£ã管çè
ãè¡ããŸãããããã¯ãã§ãŒã³ã®å Žåã¯ãCI ã«ããèªåããŒãžã«è¿ãã§ãããªã¯ãšã¹ãããã远èšå
å®¹ïŒæ°å€ã®å¢æžãªã©ïŒã«äžçå·ããªããšä»ã®ããŒããã倿ãããå Žåã¯ãæ©ãè
åã¡ã§ç»é²ïŒè¿œèšïŒãããŸãã
ãã®æã®ãäžçå·ããªãããã®ç¢ºèªã¯ããµãŒãã¹ã«ãã£ãŠç°ãªããŸãã
äŸãã°ããããã¯ãã§ãŒã³ãä»®æ³é貚ãªã©ã®æå·è³ç£ã®ãµãŒãã¹ã«äœ¿ãããŠããå Žåã¯ããå£åº§æ®é«ã確èªããããªã©ã®ç¢ºèªã§ãã
å®éã®ç¢ºèªã¯èªåã§è¡ãããŸãããæåã§ã確èªå¯èœã§ããæå·è³ç£ã® DBïŒãããã¯ãã§ãŒã³ïŒãã®ãã®ãããŠã³ããŒãããŠç¢ºèªããŠãããã®ã§ãããããŒã¿ãµã€ãºã倧ããã£ãããDB ã¯ã©ã¹ã¿ãŒã®äžå¡ã«ãªããªããšãããªããªã©ãç ©éã§ãã
ãããŠãã®ãããã¯ãã§ãŒã³ã¯ API ãæäŸããŠããã®ã§ãWeb API ãçµç±ããŠç¢ºèªããã®ããæåã®å Žåã¯æ¥œã§ãããããã® 1 äŸãšããŠãSolana ã®ãããã¯ãã§ãŒã³ãå©çšããæå·è³ç£ã® 1 ã€ã§ãã SOL ã®çè ã®å£åº§ãã芧ãã ããã
- KEINOS ã® SOL ãŠã©ã¬ããããªã³ã©ã€ã³ã§èŠã @ explorer.solana.com
2023/02/27 çŸåšããã£ãã® 1.19 SOL ããæ®é«ããªãããšã確èªã§ããŸãããŸããHistory ã§å£åº§éã®ç§»åã®å±¥æŽã確èªã§ããŸãã
ããã§ã¯ãä»®æ³é貚ããã¬ãã§ã¯ãªãããããã¯ãã§ãŒã³ã®ä»çµã¿ã«ããããã® History ã¯ã远èšã¯ã§ããŠã倿Žãæ¹ç«
ãããã¯ã»ãã§ãŒã³ã§ã¯ã倿Žäžå¯èœããå®çŸããããã«ã以äžã®ïŒã€ã®ããã·ã¥é¢æ°ã®ç¹åŸŽã掻ããããŠããŸãã
- éå¯éã§ããïŒå ã«æ»ããªãïŒ
- åäžæ§ïŒåããã®ã§ããããšïŒã確èªã§ãã
- è¡çªãæ¢ãã®ã¯å€§å€ã ããæ¢ãããã®ã確èªããã®ã¯ç°¡å
ããã§èšããè¡çªããšã¯ãç°ãªãå€ãªã®ã«ããã·ã¥å€ãåãã«ãªã£ã¡ãŸã£ãããšããç¶æ
ã§ããæ¥ççšèªã§ collision ãšèšããçºé³ã¯ãã§ããšç
§ããæãã§ããããããïŒãå¯ãã«ãã³ãªãžã§ã³ãã§ãã
ãããããããã¯ã»ãã§ãŒã³ã®äœããããããã®ã§ãããã
ãäžå€®éæš©åã«äŸåããªããŠããããšãããéã«å€ããäœãšãããšãèããŸãããããããšã³ãžãã¢ãç¶ããŠãããš peer-to-peerïŒor 忣åïŒãå¿
ãããè¯ãããã§ã¯ãªãããšãäœæããŠããããã¡ã³ã³ãšããã¬ãŒãã£ã³ã°ã«ãŒããšããšäœãéãã®ãããšãããã³ã³ãã¹ãããã®æéã³ã€ã³ãšäœãéãã®ãããšããäžéãšã®ç±éã®éãããæããŠããŸããŸãã
æããããšã³ãžãã¢çã«ãããã¯ã»ãã§ãŒã³ãé¢çœãã®ã¯ããã¶ã³ãã³å°è»åé¡ããããã¯ãäºäººã®å°è»åé¡ãã解決ã§ããããšãããããŸããã
- ãã¶ã³ãã³å°è»åé¡ @ Wikipedia
- äºäººã®å°è»åé¡ @ Wikipedia
ããã¶ã³ãã³å°è»åé¡ããäºäººã®å°è»åé¡ãã®æŠèŠ
ããã¶ã³ãã³å°è»åé¡ïŒäºäººã®å°è»åé¡ãã¯ãäžèšã§èª¬æãããšãA ãã B ãžæ å ±ãäŒéããã«ãŒããä¿¡çšã§ããªãå Žåã«ãæ£ããæ å ±ãäŒããããšãã§ãããããšããåé¡ã§ãã
ãããã£ã±ã«ãµãŒããŒã§äŸãããšä»¥äžã®ã€ã¡ãŒãžã§ãã
A åœã«ãµãŒã㌠A ãB åœã«ãµãŒã㌠B ãããããäºãã®æºåãæŽããšåã
ãåŠç Xããå§ããŸããããããã©ã¡ããã®æºåãæŽã£ãŠããªãã§ãåŠç Xããå§ãããšãæ žæ žç¶ç¶
åé¡ã¯ A åœãš B åœã®ãããã¯ãŒã¯ãè€æ°ã®åœãçµç±ããªããšãããªãããšã§ãã
ãã®çµç±å ã«ã¯æµå¯Ÿãã C åœãããã ãã§ãªããå¯è¿ããããããããªãåçåœ D åœãš E åœããããŸãããå¯è¿ãããããããšèšãã®ã¯ãD åœã E åœããè³éãå®ãã圹人ã§ããå°é£ã皌ãã§è³è³ãããããããªäººãå€ãåœã§ããããšããèšå®ã§ãã
ãæºåãã§ããŠããªãããšäŒããã®ã«ãæºåã§ããããšäŒãã£ãŠããŸã£ãå Žåãäž¡åœã厩å£ããŸããã€ãŸãæµå¯Ÿåœã¯äžç¶çµè·¯ã§æ¹ããããã®ãçãç®ã§ãããããåçåœãšãã£ãŠãå®å¿ã§ããªãã®ã§ãã
ãã®ããæºåãæŽã£ãããšäŒéããã«ãŒãã®éäžã§æ¹ãããããå¯èœæ§ãããã®ãæå€§ã®åé¡ã§ãã
éäžã®çµè·¯ã絶察çã«ä¿¡é Œã§ããªãç¶æ ã¯ããŸãã«ãµãŒããŒééä¿¡ãæã€ãããã¯ãŒã¯ã®åé¡ãšåãã ãšæãããšæããŸãã
ãã®åé¡ã«å¯ŸããŠçŸåšãããã¯ãŒã¯ã§äœ¿ãããŠããã®ã TLS/SSL éä¿¡ã§ãã
HTTPS ãªã©ã® TLS/SSL éä¿¡ã®å Žåã¯ããµãŒãã®èšŒææžãéããŠãµãŒããšã¯ã©ã€ã¢ã³ãã®ãäºãã®ç§å¯éµã»å
¬é鵿å·ããäœæãããå
±ééµã䜿ã£ãŠãéäžã§ãåå
ããããæ®å¿µãªããšã«åŸ©å·ãããå
容ãã®ãã®ããæ£ãããããŸã§ã¯ããããŸãããhttps://ã ã§å§ãŸããããšãã£ãŠå®å¿ã§ãããµã€ãã§ã¯ãªãã®ãšåãã§ããïŒç§å¯éµã»å
¬é鵿å·ã®æŠèŠã«é¢ããŠã¯ãæ¬èšäºäžéšã«ãããããã·ã¥é¢æ°ã®åºæ¬ãšç¹åŸŽããåç
§ãã ããïŒ
ããã§ãèè ãçºè¡ããããŒã¿ã®ããã·ã¥å€ãå¥ã«ãŒãã§éãã°ã埩å·ãããå å®¹ãæ£ããããšããæ€ç¥ã§ãããã§ããããããã©ã®éä¿¡ã«ãŒããä¿¡çšã§ããªãããããã®ããã·ã¥å€ããæ£ããã確信ãæãŠãŸããã
åãã€ã³ã¿ãŒãããã®ã«ãŒãã§ãªããé»è©±ç¶²ãããŒã¯ã³ããŒãã¹ããŒã«ãŒãããã¯ãŒã¯ãšãã£ãå¥ã®åªäœã®ã«ãŒããä»ããŠç¢ºèªããããšããïŒèŠçŽ
話ããå 容ããã¹ã¡ãã£ã¢ãéããšéã£ãŠããããåºçç©ãåæã«æžãæããããããæ±ºç®å ±åã§å€§äžå€«ãšæã£ãŠããéè¡ãäŒæ¥ãçªç¶ãªããªã£ãããããŒã ã»ãã¥ãªãã£äŒç€Ÿã®ç€Ÿå¡ãé ãã«ã¡ã©ãèšçœ®ããŠããããè ãããŠããã®ãè¡è¿·ã£ãã®ãå ¬ææžãæ¹ãããããããæ¿æ²»å®¶ãããäžã®äžã ãšããªããã確信ãæãŠãªããããããŸããã
ããèãããšãæå€ã«ãªã¢ã«ãªè©±ã ãšæããŸãã
ãã¹ã¯ãŒãä»ã ZIP ãããªããå ±é鵿å·ãšããŠå šçã ã£ãæä»£ãã¡ãŒã«ãéã£ããå±ãããé»è©±ã§ç¢ºèªããã®ãæµè¡ããŸããã
ã¡ããã©ãã®é ããã©ã€ãã·ãŒããŒã¯ãååŸãããããæ·»ä»ãã¡ã€ã«ã¯ãã¹ã¯ãŒãä»ã ZIP ã§ã¡ãŒã«ã«æ·»ä»ããŠéãããã¹ã¯ãŒãã¯æ¬¡ã®ã¡ãŒã«ã§åãã¢ãã¬ã¹ã«éããã®ãäŒæ¥ã§æµè¡ããŸãããä»ã§èšã倱æãããïŒæ®µé
ãããããã©ã€ãã·ãŒããŒã¯ã«éãã ISO ã JIS ãªã©ãããã§ãããèŠæ Œã®èªèšŒå£äœã¯ä»¥äžã®ããã«èŠä»¶ïŒãã§ãã¯äºé ïŒã¯å®çŸ©ãããã®ã®å ·äœçãªå®è£ æ¹æ³ã«ã€ããŠã¯èšåããŸããã
ãå人æ å ±ãå«ãæ·»ä»ãã¡ã€ã«ãåæ±ãéã«ãã»ãã¥ãªãã£å¯ŸçïŒããŒã¿ã®æå·åããã¹ã¯ãŒãèšå®ãªã©ïŒã®æªçœ®ãè¬ããããšãïŒç¬¬23æ¡ïŒ
ãããŠããã©ã€ãã·ãŒããŒã¯ååŸã®èŠä»¶ãç¶²çŸ ããããæã®äŒæ¥ãç¬èªè§£éã§åã£ãææ³ãããã¹ã¯ãŒãä»ã ZIP + å¥ã¡ãŒã«ã§ããããæªçœ®ãè¬ããŠããããšããã®ã§ãã
ãã®æä»£ãããã¯ã©ã€ã¢ã³ããæ¬åœã«æ¬²ããã£ããã®ãç³»ã®ãåã¯èšã£ãŠãªãããèŠä»¶ã¯ç¶²çŸ ããŠããããããšãè©æžããäœè£ãåªå ããããšããéå»ã®æªããç¿æ £ã® 1 ã€ãšãèšããŸãã
ãã¡ããããããªã®ã¯ãã¡ã¡ããªã®ã§ãçŸåšã¯å
¬é鵿å·ãšãã¡ãããš
ãŸããå ¬ééµã¯å ¬ééµåºç€ãéããŠå®å šã«ååŸã§ããããã«ãªããŸãããã€ãŸããååŸããå ¬ééµãå ¬ééµåºç€ã«åãåãããŠæ£ããå ¬ééµã§ããã確èªã§ããã®ã§ãã
ããããæåœã®ãåœã管çããŠããå ¬ééµåºç€ããšèšãããŠãæ¬åœã«ããããæ£ããå ¬ééµãã§ãããšç¢ºä¿¡ãæãŠãã®ã§ããããã
ãã®èªèšŒå±ãä¿¡çšã§ããŸããïŒ
ããã§ãå ã®ããã¶ã³ãã³å°è»åé¡ïŒäºäººã®å°è»åé¡ãããã©ã€ããŠããŸãã
çŸåšã® SSL/TLS éä¿¡ã¯ãèªèšŒå±ãéè¡ãæ¿åºã®ããã«ãä¿¡çšãããããªãããšããç¶æ ã§åããŠããŸããã€ãŸããèšŒææžïŒå ¬ééµãæ£ãããã®ã§ãããã®èšŒææžïŒãçºè¡ããçµç¹ãäŒæ¥ãä¿¡çšãããããªãã®ã§ãã
ããããã®çµç¹ãäŒæ¥ã®æ åœè ãæŽè³ãããããå¹¹éšãæµå¯Ÿåœãšæãçµãã§ããå Žåãåœã®å ¬ééµã®èšŒææžãçºè¡ããå¯èœæ§ã¯ãŒãã§ã¯ãªãã®ã§ããããã¯ãæåã®ææŠçãªåœã®å ¬ééµåºç€ãæåã®æçºçãªåœã䜿ãããããªãããã«ããäºãã®å ¬ééµåºç€ãä¿¡çšããŠããªãã®ãšåãã§ãã
äžçã®æµ·åºã±ãŒãã«ã§ããããã©ã®åœã«ã±ãŒãã«ãåŒãäžããããããã§æããã®ã§ãã
ãå¥ã«ã±ãŒãã«ã®äžãéãããŒã¿ãæå·åãããŠããã ã£ãããéäžã§èŠãããŠããããããããšèšãããã«ã¯è¡ããªãã®ã§ãã圹人ã§ããããã¹ã¯ãŒãä»ã ZIP ã®ãã¹ã¯ãŒãã FAX ã§éã£ãããhttp ãš https ã®éãã CC ãš BCC ã®éããç¥ããªãã£ãã確èªããªãã§ãã©ãŒã ã«å€§äºãªæ
å ±ãå
¥ãã¡ãããããªãæäžã§ãããã
ã€ãŸãããA ãã B ãžéèŠãªæ©å¯ããŒã¿ãäŒãããããšããæã«ãäžéã«äœçœ®ãã人ããããã埮åŠããšããããšã§ãã
ãã®ããã«ãäºäººã®å°è»åé¡ãã¯ãããã¯ãŒã¯ã®åé¡ã ãã§ãªããäžéã«äœçœ®ãããã®ãä¿¡çšã§ããªãç¶æ³ã§èµ·ããçŸä»£ã®åé¡ã§ãããã®ã§ãã
ãã®ãäºäººã®å°è»åé¡ããé埳ã§ãªãä»çµã¿ã§è§£æ±ºã§ãããããããªããšããã®ã話é¡ã®ãããã¯ã»ãã§ãŒã³ã§ãããªããšãè³è³ãªã©ã®å°éã§å¯è¿ãå°æªå ã峿¹ã«ãã¡ããã°ããããããïŒããšããé転ã®çºæ³ã§ãã
ãããã¯ã»ãã§ãŒã³ã®æŠèŠ
ãããã¯ã»ãã§ãŒã³ã¯ã忣åããŒã¿ããŒã¹ãã®äžçš®ã§ããã忣åããšèšãããã®ã§ P2P åãšæããããããããŸããããè¥å¹²éããŸãã
ã©ã¡ãããšèšããš gitïŒåæ£åããŒãžã§ã³ç®¡çã·ã¹ãã ïŒã«ãããããªããžããªã®é¢ä¿æ§ããããªããžããªç®¡çãã®ä»çµã¿ãã€ãŸããªããžããªéã®ã³ããããããŒãžïŒããŒã¿ã®ç»é²ãåæïŒã®æŠå¿µã«è¿ãããã®ã§ãã
ããã§ããããªããžããªããšã¯ãããŒã¿ãšå€æŽå±¥æŽãã¹ããã¯ãããŠãããã£ã¬ã¯ããªãèšããŸãããããŠããã¡ã€ã«ã»ãµãŒããŒã®ããã«ããŒã«ã«å€ã§ãªããžããªãç·æ¬ããŠããå ããã¬ãžã¹ããªããšèšããŸããGitHubãGitLabãGitee ãªã©ã¯ã¬ãžã¹ããªã§ãã
ããŠãgit ã®å Žåãã¡ã€ã³ãšãªããªããžããªãã¬ãžã¹ããªã«ããããŠãŒã¶ãŒã¯ã¬ãžã¹ããªããããŒã«ã«ã«ãªããžããªãã¯ããŒã³ïŒã³ããŒïŒããŠå©çšããŸããæ¥çãéãã®ã§çšèªãç°ãªããŸãããDB ã®ãã¹ã¿ãåæããŠå©çšãããããªãã®ã§ãã
ãŠãŒã¶ãŒãããŒã¿ã«å€æŽãè¡ãããå Žåã¯ãããŒã«ã«ã®ãªããžããªãç·šéãããã®å€æŽãã¡ã€ã³ã®ãªããžããªã«ããŒãžïŒå€æŽããŒã¿ãåæ ïŒããŸãã
ãããŠä»ã®ãŠãŒã¶ãŒã¯ãã¡ã€ã³ã®ãªããžããªã«å€æŽããããšãåæãè¡ãããšã§å€æŽã«è¿œéããŸããDB ã®ãã¹ã¿ãŒãæŽæ°ããã€ã¡ãŒãžã«è¿ãã®ããåããã§ããããã
å®ã¯ãããã¯ã»ãã§ãŒã³ã DB ã管çããã¡ã€ã³ã®ãã·ã³ããããããŒã¿ã®ç»é²ã¯ããªã¯ãšã¹ã â ç¢ºèª â ããŒãžïŒåæ ïŒããšããæç¶ããçµãŠããã®ã¡ã€ã³ã®ãã·ã³ãè¡ããŸãããããŠåããããã¯ã»ãã§ãŒã³ã® DB ãæã€ãã·ã³ã¯ãã¡ã€ã³ã®å€æŽãããŒã«ã«ã«åæããŸãã
ãããŒããããã¡ã€ã³ã®ãã·ã³ãèœã¡ããã©ãããã®ïŒããšæããããããŸããã
ã§ããããŒã
ããããgit ã䜿ãäžçªã®ã¡ãªããã¯ãåãããŒã¿ãä»ã®ç°å¢ã«ãããããšããç¹ã§ãã
ã€ãŸããã¡ã€ã³ãšãªããã·ã³ãé£ãã§ããªã«ããªã§ãããšããããç°å¢èªäœãããã¯ã¢ããã«ãªã£ãŠããããšããç¹ã倧ãããšæãããŸããDB ã®å Žåã¯ãéçšã§ã«ããŒããšãªãã®ã§ãããgit ããããã¯ãã§ãŒã³ã®å Žåã¯éçšãä»çµã¿ãšããŠçµã¿èŸŒãŸããŠããŸãã
ãããã¯ãã§ãŒã³ã®å Žåã¯ãããã«å ããã¡ã€ã³ãšãªããã·ã³ã倿Žããããšããã®ãä»çµã¿ãšããŠçµã¿èŸŒãŸããŠããŸãã
git ããããã¯ãã§ãŒã³ã®åé¡ã¯é床ã§ãã
git ã®ä»çµã¿ã¯ã倿Žã®ãªã¯ãšã¹ã â ç¢ºèª â ããŒãžïŒåæ ïŒâ åæããšãã£ãæç¶ããå¿
èŠãªããããªã¢ã«ã¿ã€ã ã«ããŒã¿ã倿Žããããããªç°å¢ã«ã¯é©ããŸããããgit ãªããžããªãåæã㊠DB ãšããŠäœ¿ãããšèšããããšãæŽæ°éåºŠã«æžå¿µãåºãã®ãšåãã§ãã
ãããŠããããã¯ãã§ãŒã³ãåãã§ãã
DB ãžã®æžã蟌ã¿éåºŠãæ±ããå Žåã¯ããããã¯ãã§ãŒã³ãªãããããåŸæ¥ã® DB ãã身å ã ãã§æ§æããããããã¯ãã§ãŒã³ïŒãã©ã€ããŒãã»ãããã¯ãã§ãŒã³ïŒãäœ¿ãæ¹ãããã®ã§ãã
ãããã¯ãã§ãŒã³ã䜿ãå¯äžã®ã¡ãªããã¯ãå ç¢ãªå°åž³ã欲ããããšããã±ãŒã¹ã§ããRDB ã®ããã«ãããŒã¿ãããããåããããããŒã¿ã®å€æŽïŒåã®å€ã®å€æŽïŒãéèŠãªãã®ã«ã¯é©ããŸããã
ãããã¯ãã§ãŒã³ã®ç·éžæ
ãããã¯ã»ãã§ãŒã³ã«ãçµå±ãã¡ã€ã³ã®ãã·ã³ãããããã¡ã€ã³ã®ãã·ã³ã«ç»é²ãããã®ä»ã®ãã©ãã¯ãŒãåæãããšè¿°ã¹ãŸãããåé¡ã¯ããã®ã¡ã€ã³ã®ãã·ã³ããã©ãã«ã§ããŠã³ããå Žåã§ãã
å®ã¯ããã®ã¡ã€ã³ã®ãã·ã³ã¯ããªãŒããŒããšåŒã°ããéžæå¶ïŒãã©ãã¯ãŒã®å€æ°æ±ºïŒã§é©å®æ±ºãŸããŸãã
çŸåšã®ãªãŒããŒã®ãã·ã³ïŒããŒãïŒãèœã¡ããšãå³åº§ã«éžæãå§ãŸã次ã®ãªãŒããŒã決å®ããä»ã®ããŒãã¯ãã©ããŒå ãå€ããã®ã§ãã
ãã®æã«äœ¿ãããéžæã¢ã«ãŽãªãºã ã® 1 ã€ããRaftããšåŒã°ãããã®ã§ãããããã¯ãã§ãŒã³ã®çš®é¡ã«ãã£ãŠéžæã¢ã«ãŽãªãºã ã¯ç°ãªããŸãããraft 㯠etcd ãªã©ã®åæ£ããŒã»ããªã¥ãŒã»ã¹ãã¢åã® DB ã§ã䜿ãããŠããã¢ã«ãŽãªãºã ã§ããã¡ãªã¿ã« etcd 㯠Kubernetes ãªã©ã®ã¯ã©ã¹ã¿ãŒåã®ã¢ããªã±ãŒã·ã§ã³ã§ãå©çšãããŠããŸãã
åŸè¿°ãããããã¯ãã§ãŒã³ã®ã51% åé¡ãã¯ããã®ã倿°æ±ºãã«ãããŸãã
ã€ãŸãããã©ãã¯ãŒã®éåæ°ãçµæããã°æ¬¡ã®ãªãŒããŒãæå³çã«æ±ºå®ããããšãã§ããã®ã§ãããã®ãããRaft ã¢ã«ãŽãªãºã ã ãã§ã¯ããã¶ã³ãã³å°è»åé¡ãã¯è§£æ±ºã§ããŸãããæå³çã«æå®ãããç¹å®ã®ãªãŒããŒããæ¹ç«
å°åž³ãšã¯
ãããã¯ã»ãã§ãŒã³ãç¥ãäžã§éèŠãªçšèªã® 1 ã€ã«ãå°åž³ãããããŸãã
ãããã¯ã»ãã§ãŒã³ã¯ãåæ£ç®¡çå°åž³ããšãåŒã°ããã®ã§ãããçµçãçµçç³»ã®ã·ã¹ãã ã«æºãã£ãããšã®ãã人ã§ãªããšããå°åž³ããšããåèªã¯éŠŽæã¿ããªããããããŸãããå®ã¯ããå°åž³ããšããåèªãçè§£ããªããšãã³ãšããªãããšããããŸãã
å ã«ãè§ŠããŸãããããå°åž³ã¯è¿œèšããã§ããªãããŒã¿ã»ããŒã¹ïŒä»¥äž DBïŒãã§ããäžåºŠæžã蟌ãã ã倿Žã§ããŸããã
ãããŠã倿Žããããå Žåã¯ããŒã¿ã®æžãæãã§ãªãã倿Žã®è¿œå ãããããšããããšã§ããã€ãŸããã7ããšããå€ãã5ãã«ä¿®æ£ãããå Žåã¯ãã-2ããšãã倿Žã远å ããŠèª¿æŽããŸããçµçã®å°åž³ã§èšããèµ€äŒãïŒãã€ãã¹èª¿æŽãããããã®äŒç¥šïŒã§ãã
ãã®ä»çµã¿ã¯èº«è¿ãªãšããã§èŠãããšãã§ããŸããéè¡ã®éåž³ãåœæ°åºæ¬å°åž³ã§ãã貯éé¡ãäœæå€æŽã¯ãæžãæããã§ãªãã远èšãããããšã§æŽæ°ããŸãã
ãããã³ã€ã³ãªã©ã®ä»®æ³éè²šïŒæå·é貚ïŒããDB ã®æåã«äœæããã³ã€ã³ãç»é²ããŠãããããããã©ã¹ããã€ãã¹ããŠããã®ã§ãã
å®ã¯ã倿Žã®ã¿è¿œå ããŠããä»çµã¿ã¯ git ã䌌ãŠããŸãã
ããã git ã¯ããŒã¿ãæžãæããããšãæè¡çã«ã§ããã®ã«å¯Ÿãããããã¯ã»ãã§ãŒã³ã¯ä»çµã¿äžã§ããŸããããããå³å¯ã«ã¯ã§ããã®ã§ããéããªãäžå¯èœã§ããããã忣å°åž³ãšãåŒã°ããæä»¥
git ã«æ
£ããŠãã人ã§ããã°ããããã¯ã»ãã§ãŒã³ã¯ã絶察çã«éå»ã®ããŒã¿ã倿Žã§ããªã git ã®ãããªãã®ããšèããŠãå·®ãæ¯ããªããããããŸããã
ããããgit ãšæ±ºå®çã«éãã®ã¯ãã¡ã€ã³ãšãªããã·ã³ã¯æç¥šã§æ±ºãŸããé©å®å€ããããšããç¹ã§ããGitHub ãèœã¡ãããã©ãŒã¯å
ãéžæã§ GitLab ã«ããã Gitea ã«ãããæ±ºããŠããã©ãŒã¯å
ãäžæã«å€æŽãããããªã€ã¡ãŒãžã§ãã
ãŸããåŸè¿°ãããäœããã©ã®ããã«ç»é²ããããããæç¥šãä»ã®ãã·ã³ã®æ€èšŒã«ããæ±ºãŸããŸãããããŠæç¥šã§æ±ºãŸã£ãå 容ãåæ ãããŠããå Žåã®ã¿ãä»ã®ãã·ã³ãããŒã«ã«ãåæããŸãã
ã€ãŸããã¡ã€ã³ãšãªãããŒãã¯ãæç¥šã§æ±ºãŸã£ãããŒã¿ã®ç»é²ãããã ãããšãã圹åãã«ãªããŸãã
ãã®ãããã¡ã€ã³ãšãªããã·ã³ãèœã¡ãŠããèªåçã«ä»ã®ãã·ã³ãæç¥šã«ããæ±ºãŸãããã1 å°ã§ã DB ãæã€ãã·ã³ãããã°ããµãŒãã¹ãæ¶ããããšããªãããŒã¿ããæäŸã§ããããšã«ãªããŸãã
ãšãªããšãã©ã®ããã«ããŒã¿ã管çããã®ãããæ°ã«ãªããšããã§ãããããã§ããã·ã¥é¢æ°ãåºãŠããŸãã
ãããã¯ã»ãã§ãŒã³ã®æ§é
ãããã¯ã»ãã§ãŒã³ã®åºæ¬æ§é ã¯å²ãšåçŽã§ããïŒã€ã®ããŒã¿ããåã®ããŒã¿ã®ããã·ã¥å€ãæã€ããšãããã®ã§ãã
ãããŠãåŸè¿°ããããã«ãŒãã»ãªãã»ã¯ãŒã¯ãïŒãããã¯ããã«ãŒãã»ãªãã»ã¹ããŒã¯ãïŒãšèšãæŠå¿µãšã»ãããšãªã£ããã®ãããããã¯ã»ãã§ãŒã³ããšèšããŸãã
ãããã¯ã»ãã§ãŒã³ã¯ããµãã·ã»ãã«ã¢ãããªãæ¥æ¬äººãšæãããè¬ã®äººç©ãæå±ãããšèšãã®ã¯èããããšããããšæããŸãã
å®éã«ãããªã®ã§ãããå³å¯ã«ã¯ãåŸæ¥ãããã 2 ã€ã®èãæ¹ãçµã¿åããããã®ããçºæ³ãåŸããã®ããšèšããŸãã以äžããããããã® 2 ã€ã§ãã
- ããŒã¯ã«ã®æšïŒããã·ã¥æšïŒ
- ããŒã¯ã«ã®ããºã«
ããã§ãå ã®ããã·ã¥é¢æ°ã®åºç€ç¥èã§ãå¡©ïŒsaltïŒã¯åŸããè¶³ããã®è©±ãã«åºãŠããããŒããŒã»ããããã®ãããªååã®ãããŒã¯ã«ã»ãã³ã¬ãŒãããæãåºããŠãã ããã
å®ã¯ããã®ãããŒã¯ã«ãã¯ã©ã«ãã»ããŒã¯ã«æ°ã®ããŒã¯ã«ãªã®ã§ãããå人çã«ããã£ãšè©äŸ¡ãããã¹ããçãªäººç©ã ãšæããŸããïŒãããæ¥çã§ã¯è¶ æå人ãªã®ã§äžè¬ã«èªç¥ãããã¹ã人ãšèšããïŒ
ã©ããããŒã¯ã«æ°ã¯ãæ¥æ¬ã§èšãã°åéšéœäžéããã®ãããªãã¢ã€ãã¢ããã³ãã³ãšæããŠã¯ä»ã®äººã«åœ±é¿ãããã¿ã€ãã®äººã ã£ãããããå ¬é鵿å·ã®åºç€ãšãªãã¢ã€ãã¢ãäœã£ãããæå·åŠçããã·ã¥ã®å ãšãªãããŒã¯ã«ã»ãã³ã¬ãŒããçºæãããããã¡ã€ã³ãã³æ°ãäºèšïŒæå±ããéåã³ã³ãã¥ãŒã¿ããç©è³ªãååã¬ãã«ã®å€§ããã§å¶åŸ¡ãããã€ã¹ãšããŠäœ¿ãããšãããã³ã³ãã¥ãŒã¿ãŒãšååãããã¯ãããžãŒã®èåã®ãã€ãªãã¢ããšåŒã°ããããšæãã°ã人äœå·åä¿åã®äººããšèšããããããŸããããã¯å€ãªäººã§ããååœã®æ¹ãªã®ã§ Youtube ãªã©ã§ã°ã°ãã°è²ã ãªè¬æŒãèããŸãã
ããŠããïŒã€ã®ããŒã¿ããåã®ããŒã¿ã®ããã·ã¥å€ãæã€ããšèšããŸãããããã®æ§é ã®æŠå¿µèªäœã¯ git ã®ã³ãããããã·ã¥ãªã©ããããã¯ãã§ãŒã³ä»¥åããååšããŠããããã®ããŒã¹ãšãªãã®ããããã·ã¥æšãã§ãã
ãããŠãããã«ãŒãã»ãªãã»ã¯ãŒã¯ãã®å ã«ãªãã®ããããŒã¯ã«ã®ããºã«ãã§ãã
æšãšèšããããã§ãŒã³
ããã·ã¥æšã®å Žåã¯ãæšãéã«ãããããªæ§é ã§ãåããšãªããããã¯ã®ããã·ã¥ãã芪ããæã€ãšèšããã®ã§ãããã®æ§é ã¯ãè€æ°ã®ãã¡ã€ã«ããåå²ããããŒã¿ãã 1 ã€ã®ããã·ã¥å€ãäœæããå Žåãªã©ã«äœ¿ãããŸãã
ãããã¯ã»ãã§ãŒã³ã¯ããããã·ã³ãã«ã« 1 æ¬ã«ããæãã®ãã®ã§ãã
åãããã¯ã«ã¯ãããŒã¿ããšãããã·ã¥å€ãããããããã·ã¥å€ã¯ 1 ã€åã®ãããã¯ã®ããŒã¿ãšããã·ã¥å€ãããã·ã¥åãããã®ã§ãã
ãã®ããã·ã¥ã®å€ããããã¯ãšãããã¯ã®ã€ãªããšãªããã§ãŒã³ã«ãªã£ãŠããããããããã¯ã»ãã§ãŒã³ãšåŒã°ããŸãããã§ãŒã³ã«èŠããŸãã§ããããã
å®ã¯ããããã¯ã»ãã§ãŒã³ã¯ãããŒã¿ãã«å·¥å€«ããããŠãããä¿åãããããŒã¿ã®ãã£ãŒã«ããš nonce ãšåŒã°ãããã£ãŒã«ãããããŸãã
nonce ã£ãŠããªãã£ã¹ãïŒ
nonceïŒãã³ã¹ãããã¯ãã³ã¹ïŒãšã¯ã1 床ã ã䜿ãããæ°å€ãã§ã"Number used once" ãšãèšãããŸããç¥èªã§ã¯ãããŸããã
nonce ã¯ãnineïŒ9ïŒã noneïŒãªãïŒã®èªæºã«ããªã£ã nones ããæ¥ãŠããŸããnones ã¯ãããŒãæŠã 8 ãããŒã¹ã«ããŠããæä»£ã«ãéœåãæªãæã«äœ¿ã£ãè¬ã®èª¿æŽå€ã®ãããªãã®ã§ããä»ã§ããé幎ãéç§ã¿ãããªãã®ã§ããããã
ãããã 8 ã®æ¬¡ã® 9ïŒnineïŒããååšããªããã®ïŒnoneïŒã«å€åããŸããã転ããŠãäžæçã«èª¿æŽã®ããã«äœ¿ããããã®ãã nonce ãšèšãããã«ãªããŸãããã for the nonce ã®ããã«ã䜿ãããæ¥æ¬èªã§èšãã°ããšããŸ
ãããã¯ãã§ãŒã³ã§ã¯ãnonce 㯠1 ã€ã®ãããã¯ã𿬡ã®ãããã¯ãã€ãªããããã ãã« 1 床ã ãç®åºãããæ°å€ã§ãã
Qiita ãŠãŒã¶ã«ã¯äžæãªæŠå¿µå³ã§ç€ºããããããŒã¿ã§èŠãæ¹ããã³ãšãããããããŸããã
ãããã¯ã»ãã§ãŒã³ã®ããŒã¿ã JSON 圢åŒã§ç°¡ç¥è¡šçŸãããšä»¥äžã®ããã«ãªããŸããhash data nonce ã®ïŒã»ãããïŒãããã¯ãšããŸãã
[
{
"hash": "<hash1>",
"data": "<data1>",
"nonce": "<nonce1>"
},
{
"hash": "<hash2>",
"data": "<data2>",
"nonce": "<nonce2>"
},
...
]
äžèšã® hashãdataãnonce ã® 3 ã€ã®ããŒã®å
容ã¯ä»¥äžã®éãã
-
hashããŒã®å€ã¯ãåã®ããŒã¿ã®hashãšdataãšnonceã®å€ãã€ãªããŠããã·ã¥ãããã®ã§ããïŒ<hash2> = hash('sha256', <hash1> + <data1> + <nonce1>);) -
dataããŒã®å€ã¯ãäœãããã®ããŒã¿ãã§å¹³æã§ãæå·æã§ãæ§ããŸãããããã°ã©ã ã®ã¹ã¯ãªããã§ãã£ãŠãæ§ããŸããããªããªã WebAssembly ã® WASM ãã€ããªã ã£ãŠããã®ã§ãã - "
nonce" ããŒã§ãããããããããã¯ã»ãã§ãŒã³ã®ãã¢ã»ã» ã§ãã
"nonce" ã¯ãããŒã»ã¹ãã¬ããã³ã°ãã®äžçš®ã§ããïŒãã¹ãã¬ããã³ã°ãã«ã€ããŠã¯ãæé ã®ãå¡©ã ãã§ãªãè¡æ€ãè¶³ãããã®ã³ã¡ã³ãæ¬ãã芧ãã ããïŒ
ã€ãŸã "nonce" ã¯ãã¯ã©ããã³ã°ïŒæªãããšç®çã®æäœïŒã«å¯Ÿãããé¢åãããããå ããããã®ãã²ãšæéã§ãããã® nonce ã®å€ãç®åºããããšãããã€ãã³ã°ããšåŒãã§ããŸãã
ãã€ãã³ã°ïŒçºæïŒãšåŒã¶ã®ã¯ããã® nonce ã®å€ãæåã«èŠã€ããæ¿èªãåŸããã人ã¯å ±é
¬ãããããããã§ãããããã¯ã»ãã§ãŒã³ããããã³ã€ã³ã®å Žåã¯ããããã³ã€ã³ãããããŸãã
ãã® nonce å€ãèŠã€ããããšãçŸéã«ã€ãªããã ãã§ãªããã¿ããªã®ãã€ãã³ã°äœæ¥ãæ¿èªäœæ¥ã«ãã£ãŠãããŒã¿ã®ããã·ã¥å€ãæ£ç¢ºã§ãããããè€æ°äººã§ç¢ºèªããã£ãŠããããšã«ãªããããããŒã¿ãå
ç¢ã«ãªã£ãŠè¡ããŸãã
ð  ããŸã«ãã€ãã³ã°ãä»®æ³éè²šïŒæå·é貚ïŒãã®ãã®ãçºæãããããªæå³ãšãæããèšè¿°ãèŠãããŸãããéããŸãã
ãéãçºæããã俺ã®ãã®ãçãªå®£äŒãå€ãã®ã§ãããã¥ããã®ã§ãããã©ã¡ãããšèšããšãã¬ã¢ã¡ã¿ã«ãçºæãããå ±é ¬ã§ãéããããããã€ã¡ãŒãžãè¿ããšæããŸãããããã³ã€ã³ã®å Žåã¯ã
nonceå€ããã¬ã¢ã¡ã¿ã«ã§ãããããã³ã€ã³ããå ±é ¬ã®ãéã§ãã
ä»®æ³é貚èªäœã¯ïŒã³ã€ã³ããšã«ãã³ã€ã³ã®ç§å¯éµãšã³ã€ã³ã® ID ãšãªãããã·ã¥å€ãã»ããã«ãªã£ããããªããŒã¿ã§ãåã³ã€ã³ã¯ 0ã1 ã®floatå€ãæã£ãŠããåå²å¯èœã§ãããããã³ã€ã³ã®å Žåã¯ã1.00000000ãŸã§åå²å¯èœã§ãããã®ã³ã€ã³ã¯ãäžè¬çã« ICO ãšåŒã°ããã¹ãããã§äœæïŒçºè¡ïŒããããããã¯ãã§ãŒã³ã®åæå€ãšããŠç»é²ãããŸããããããããŠãŒã¶ãŒãè³Œå ¥ãããã¯ãããããšã§ã³ã€ã³ã®ç§»åãå§ãŸããŸãã
ã³ã€ã³ã®ç§»åãšèšããŸããããå®ã¯ç©ççãªã³ã€ã³ãç§»åããããã§ã¯ãããŸãããå£åº§æ¯æ¿ã«è¿ãããA ã®åå®ãã B ã®åå®ãž N ã¶ãã®ã³ã€ã³ãç§»åããããšããèšé²ããããã¯ãã§ãŒã³ã«èšé²ãããããšã§ãã³ã€ã³ã®ç§»åããšãªããŸãããããŠåå®ã®å£åº§ãšãªãã®ããŠãŒã¶ãŒã®å ¬ééµã§ãå ¬ééµãšçŽã¥ããããŒã¿ãç§å¯éµãã»ããã§ãŠã©ã¬ãããšåŒã³ãŸãã
ã€ãŸãããB ã A ããã³ã€ã³ã N ã¶ãåãåãããšèšãã®ã¯ãA ã®å ¬ééµã«çŽã¥ããŠããå€ã N ã¶ãæžãããB ã®å ¬ééµã«çŽã¥ããŠããå€ã N ã¶ãå¢ãããšããåŠçãäž¡è ã眲åããç»é²äŸé Œããããšãã€ããŒã¯ããã®æŽåæ§ããã§ãã¯ãnonceæ¢çŽ¢ãå§ããnonceå€ãèŠã€ãããšã¡ã€ã³ã®ãããã¯ãã§ãŒã³ïŒããŒãïŒã«èšé²ããããååŒæç«ããšãªããŸãããããŠããã®ååŒã®å·®åããŒã¿ãä»ã®ããŒããšåæãããŠãããŸãã
ãã®ããã«ããŠã©ã¬ããã®ç§å¯éµãæã€è ã§ãªããã°å¥ã®ãŠã©ã¬ããã«ç§»åã§ããŸãããéã«èšãã°ãç§å¯éµãç¡ãããŠããŸããšãã³ã€ã³ã䜿ãã©ããããèªåã®ãã®ã§ããããšã蚌æããããšããçŸéåããããã«æéæã®ãŠã©ã¬ãããžãç§»åã§ããªããªããŸããã€ãŸãããŠã©ã¬ããã®ç§å¯éµãçãŸããŠããŸãã°ãç§»åã§ããŠããŸããšããããšã§ããããŸããéåž³ãšå°éãããã£ãã·ã¥ã«ãŒããšæèšŒçªå·ãçãŸãããããªãã®ã§ãæšä»ã®æå·è³ç£ã®çé£ã¯å šãŠããã§ããããŒã
ãããã¯ãã§ãŒã³ã«ããããããŒããã¯ãããã¯ãã§ãŒã³ã®ãã¢ã®ãã¡ãDB ã®ç®¡çãããŠãããã¢ãã§ããã³ã€ã³ååŒæãã¡ã³ããããã€ããŒïŒãã€ãã³ã°ããã人ïŒãªã©ããããŒããã«è©²åœããŸããåã ã®ããŒãã® DB ã¯åæãããŠãããããããããã¯ã»ãã§ãŒã³ãã忣å°åž³ããšãåŒã¶ãããã»ã»ã» ã§ãããããŒããã¯ãããã¯ãŒã¯ã®åžžææ¥ç¶ããã£ã¹ã¯å®¹éãå¿ èŠãšãã£ããã¡ãªããããããŸããããããŒããã«ãªãã¡ãªããã¯ãããã¯ãã§ãŒã³è¿œå æã«å ±é ¬ã®ããã®ã³ã€ã³ãäœæïŒçºè¡ïŒããããšãã§ããç¹ãš DB 远å ã®ææ°æãããããç¹ã§ãããã®ãããåæã®é ã¯ãããŒããšãã€ããŒïŒãã€ãã³ã°ïŒãå Œä»»ãããµãŒããŒãå€ãããããããã€ãã³ã°ïŒã³ã€ã³ã®çºæããšããã€ã¡ãŒãžãç£ãã çç±ã§ããããŸãããããã«ããŠãããããã¯ã»ãã§ãŒã³ã¯ DB ã®ïŒçš®ã§ãããšèããŠå·®ãæ¯ããªããšæããŸãããã®ããããããã¯ã»ãã§ãŒã³ã®ä»çµã¿ã¯ä»®æ³éè²šïŒæå·é貚ã§ãªããŠã掻çšã§ããŸãã
- ãããã³ã€ã³ã®ã¡ãŒã«ãšè«æ by ãµãã·ã»ãã«ã¢ã
- ãããã³ã€ã³è«æããããã ãããã¯ãã§ãŒã³ã®ãã³ã @ ãªããžã§ã¯ãã®åºå Ž
ãããã¯ã»ãã§ãŒã³ã¯ "nonce" ã»ã³ã¹ãªã²ãŒã
ãããã¯ã»ãã§ãŒã³ã«ããã nonce ã¯ãäžèšã§èšããšãããã·ã¥å€ã®è¡çªãæ¢ãã²ãŒã ã§ãæåã«èŠã€ãã£ãå€ãã§ãã
ãã®ã²ãŒã ãšã¯ãçŸåšã® data ãš hash ã«ãnonce ãå ããŠããã·ã¥åãããšãæåã® n æ¡ã 0ïŒãŒãïŒã«ãªã nonce ã®å€ãæ¢ãããšãã£ããã®ã§ãã
// 1 ã€ã®ãããã¯ã»ããŒã¿
$data = 'something';
$hash = '34902903de8d4fee8e6afe868982f0dd';
$nonce = 'd9'; // <- èŠã€ãã nonce å€
// md5 ã§ããã·ã¥ïŒ$data.$hash.$nonceïŒ
$result=hash(md5, 'something34902903de8d4fee8e6afe868982f0ddd9');
// ã²ãŒã ã®çµæç¢ºèª
echo $result; // -> 00603ea2b0f451d9531b6caeb0e96afb
// result ã®æåã® 2 æ¡ã 0 ïŒãŒãïŒãªã®ã§ã¯ãªã¢ïŒ
ãã®æ¡æ°ã 0ïŒãŒãïŒã®å€ãªã©ã¯ãããã¯ãã§ãŒã³ã«ãã£ãŠã«ãŒã«ã¯ç°ãªããŸããããããã nonce ãå ããŠããã·ã¥åããæã«åºãå€ã«å¯Ÿããã«ãŒã«ã§ãã
nonce ãæ¢ãã€ã¡ãŒãžã Bash ã§æžããŠã¿ãŸããã
#!/bin/bash
# RULE
VALUE_HEAD='0000'
LEN_HEAD=${#VALUE_HEAD}
# Function
function dechex() {
printf '%x' $1
}
function isValidNonce() {
[ "${1:0:$LEN_HEAD}" = "${VALUE_HEAD}" ]
return $?
}
function hash() {
algo=$1
value=$2
echo $(echo -n $value | openssl $algo | awk '{print $2}')
}
# Data
data='something'
hash='34902903de8d4fee8e6afe868982f0dd'
nonce=''
# Mining/Search nonce
counter=0
while true
do
nonce=$(dechex $counter)
string_to_hash="${data}${hash}${nonce}"
hash_temp=$(hash 'md5' $string_to_hash)
isValidNonce $hash_temp && {
break
}
counter=$((counter+1))
done
echo "Nonce found: ${nonce}"
- ãªã³ã©ã€ã³ã§åäœãã¿ã @ paiza.IO
ãããããããã¯ãã§ãŒã³ã¯ãäžåºŠãçã§ãããã¯ãã§ãŒã³ãèŠããåããããšèšãããããããªã®ã§ãå šäœã®æµããããã°ã©ã ã§èŠãæ¹ããã³ãšãããããããŸããã
PHP ã§ç°¡åã«æžããŠã¿ãŸãããïŒå®éã«è§Šããããã«ãããŠããã®ã§ããããªã«æ ¹è©°ããŠèªãå¿ èŠã¯ãããŸããããã®èšäºã¯ããã£ãšæµãããããã°ãkã§ãããããçšèªã«èŠæ £ããããã«èªããçšåºŠã®ææ°èŸŒã¿ã§ãèªã¿ãã ããïŒ
// ïŒã€åã®ãããã¯ã»ããŒã¿
$block_chain[] = [
'data' => 'sample1',
'hash' => 'a4626f9d3e6802aebbff46697248e0b9',
'nonce' => 'xxxxxx',
];
// ïŒã€åã®ãããã¯ã»ããŒã¿ïŒLatestïŒ
$block_chain[] = [
'data' => 'sample2',
'hash' => '3152851bf5419247cf948e871b0adfe8',
'nonce' => '32648',
];
// æåã®ïŒæåã 0 ã§ãã
define('VALUE_HEAD', '0000');
define('LEN_HEAD', strlen(VALUE_HEAD));
/* æ€èšŒçšã®é¢æ° */
function isValidNonce(string $nonce): bool
{
// ã«ãŒã«ïŒ$nonce ã®é n æåã VALUE_HEAD ãšåã( n = LEN_HEAD )
return (substr($nonce, 0, LEN_HEAD) === VALUE_HEAD);
}
function isValidHashInLatestBlock(array $block_chain): bool
{
// çŸåšã®ãããã¯ã®é·ã
$len_block_chain = count($block_chain);
// ïŒã€åã®ãããã¯ã®ããŒã¿ååŸ
$key_2block_ago = $len_block_chain - 2;
$data_2block_ago = $block_chain[$key_2block_ago]['data'];
$hash_2block_ago = $block_chain[$key_2block_ago]['hash'];
$nonce_2block_ago = $block_chain[$key_2block_ago]['nonce'];
// æåŸ
ããããã·ã¥å€ã®ç®åº
$hash_previous_expect = hash('md5', $data_2block_ago. $hash_2block_ago . $nonce_2block_ago);
// ïŒã€åã®ãããã¯ã®ããã·ã¥å€ååŸ
$key_block_previous = $len_block_chain - 1;
$hash_previous_actual = $block_chain[$key_block_previous]['hash'];
// ïŒã€ç®ã®ãããã¯ã®ããã·ã¥å€ã®æ€èšŒ
return ($hash_previous_expect === $hash_previous_actual);
}
function getBlockLatest(array $block_chain):array
{
$len_block_chain = count($block_chain)-1;
return $block_chain[$len_block_chain];
}
/* ïŒã€åã®ãããã¯ã®æ€èšŒ */
if(! isValidHashInLatestBlock($block_chain)){
echo 'Error: Not a valid hash value. Block-chain broken.' . PHP_EOL;
exit(1);
}
/* æ°èŠãããã¯ã®ããŒã¿äœæ */
// 远å ãããããŒã¿
$data_current = 'sample3';
// ãããã¯ã®ããã·ã¥å€ãèšç®ïŒïŒã€åã®ãããã¯ããïŒ
$block_previous = getBlockLatest($block_chain);
$hash_current = hash('md5', $block_previous['data'] . $block_previous['hash'] . $block_previous['nonce']);
$block_current = [
'data' => $data_current,
'hash' => $hash_current,
];
echo 'Request to add to the block-chain.' . PHP_EOL;
echo ' Data:' . $data_current . PHP_EOL;
echo ' Hash:' . $hash_current . PHP_EOL;
/* ïŒã€åã®ãããã¯ã®æ€èšŒ */
if(! isValidHashInLatestBlock($block_chain)){
echo 'Error: Not a valid hash value. Block-chain broken.' . PHP_EOL;
exit(1);
}
$data_current = $block_current['data'];
$hash_current = $block_current['hash'];
$nonce_current = '';
// Nonce æ¢çŽ¢
$i = 0;
while( true ){
$nonce_current = dechex($i);
$hash_temp = hash('md5', $data_current . $hash_current . $nonce_current);
if(isValidNonce($hash_temp)){
echo 'Nonce found: ' . $hash_temp . PHP_EOL;
break;
}
$i++;
}
/* ãã€ãã³ã°ã®çµæïŒãããæ€èšŒäŸé ŒããïŒ */
echo 'Block Data to add:' . PHP_EOL;
echo ' Data: ' . $data_current . PHP_EOL;
echo ' Hash: ' . $hash_current . PHP_EOL;
echo ' Nonce: ' . $nonce_current . PHP_EOL;
/* ïŒã€åã®ãããã¯ã®æ€èšŒ */
if(! isValidHashInLatestBlock($block_chain)){
echo 'Error: Not a valid hash value. Block-chain broken.' . PHP_EOL;
exit(1);
}
// çºèŠããã nonce ã®æ€èšŒ
$hash_verify = hash('md5', $data_current . $hash_current . $nonce_current);
echo 'Hash result: ' . $hash_verify . PHP_EOL;
if(! isValidNonce($hash_verify)){
echo ' Error: Nonce not valid.' . PHP_EOL;
exit(1);
};
// ãããã¯ã»ãã§ãŒã³ã«è¿œå
$block_chain[] = [
'data' => $data_current,
'hash' => $hash_current,
'nonce' => $nonce_current,
];
echo ' Success: New data added to block-chain.' . PHP_EOL;
// ãããã¯ã»ãã§ãŒã³ã®å
容衚瀺
echo 'Current Block-Chain:' . PHP_EOL;
print_r($block_chain);
- ãªã³ã©ã€ã³ã§åäœãã¿ã @ paiza.IO
äžèšã§éèŠãªã®ãããã€ããŒïŒãã€ãã³ã°ãã人ïŒã®åŠçã«ãããNonce æ¢çŽ¢ãã® while ã«ãŒãã®ç®æãšãããŒã¿ã远å ãã人ã®åŠçã«ãããçºèŠããã nonce ã®æ€èšŒãã®ããã·ã¥å€ã®èšç®ç®æã§ãã
ãã€ãã³ã°ã® while ã«ãŒãã®ç®æã®ç®æã§ãããäžéšã®ãããã true ã«ãªãã®ããå
šæãããã true ã«ãªãã以å€ã¯ããã察象ãéãã ãã§ããã·ã¥å€ã®è¡çªãæ¢ãææ³ãã®ãŸãŸã§ããã€ãŸããç·åœããã§æ ¹æ§ã§æ¢ããŠããã®ã§ãã
å®éã«ã¯æååã®æ¯èŒã§ãªããFF000... ã§ and åŠçïŒããããã¹ã¯ïŒããæ¹ãéããªã©ãããŸããæŠå¿µçã«ãããããããšã§ããð³
ð  å®éã®ããããã¯ã»ãã§ãŒã³ãã®ããŒã¿ã¯é«éåãªã©ãé æ ®ããŠãã£ãšè€éã§ãããããåºæ¬æŠå¿µã¯åãã§ãã
ãŸãããããã¯ã»ãã§ãŒã³ã§ã¯ããŒã¿ã®å¡
ãããŸã ãããããã¯ããšåŒã¶ã®ã§ããããããã¯ãŒã¯ã®ããã±ããããšããã¬ãŒã ãã®ããã«ããããã¯ãšåŒã°ããåºåããã¬ãã«ïŒã¬ã€ã€ãŒïŒã«ãã£ãŠéããŸããããã§ã¯ä»çµã¿ãããããããããã«ãç»é²ãããïŒã€ã®ããŒã¿ããããããã¯ããšåŒã³ãŸããåèãšããŠããããã³ã€ã³ãªã©ã¯ãn åéã®ååŒããŒã¿ããïŒãããã¯ãšæéåäœã§åºåã£ãŠããŸãïŒçŸåšã¯ n=10ïŒããããŠç»é²ãããåã ã®ããŒã¿ãããã©ã³ã¶ã¯ã·ã§ã³ããšåŒãã§ããŸãã
ã©ã®ãã㪠nonce ã®æ¢ãæ¹ã§ãã£ãŠããå¹³åããŠç¹å®ã®æéååŸãããããã« 0ïŒãŒãïŒã®é·ãã®ã«ãŒã«ãèªå調æŽãããŸãããããã³ã€ã³ã®å Žåã¯ãããã 10 åååŸã«ãªãããã«èª¿æŽãããŸãã
åé¢ãæ¢çŽ¢ããã nonce ã®å€ã®ãã§ãã¯ïŒnonce ã䜿ã£ãŠããã·ã¥å€ãåºããŠé n æ¡ã 0 ã§ãããã®ç¢ºèªïŒã¯ãäžç¬ã§çµãã£ãŠããŸããŸãã
ããã§å€§äºãªã®ãããnonce ãæ¢ãã®ã¯å€§å€ã ïŒæéããããïŒãããã·ã¥é¢æ°ã§ç¢ºèªããããšã¯äžç¬ããšããããšã§ãã
ãã«ãŒãã»ãªãã»ã¯ãŒã¯ïŒä»äºã®èšŒæïŒ
ãããã¯ã»ãã§ãŒã³ã®éèŠãªåºæ¬ã«ãŒã«ã«ãçŸåšäžçªé·ããã§ãŒã³ããæ£ããšãããããããŸãã
ããã¯ãªãŒããŒïŒDB ç»é²æ åœïŒã®ããŒããããŠã³ããæã«æ¬¡ã®ãªãŒããŒã決ããéã«ãäžçªé·ããã§ãŒã³ãæã£ãŠããïŒããŒã¿éã®å€ãïŒããŒãããéžæãããšããããšã§ãã
ã€ãŸãããªãŒããŒãšåæããŠããªãã£ãå Žåããã£ããèšç®ããŠããã®ã«çãæ¹ïŒå€ãæ¹ïŒã®ãããã¯ãã§ãŒã³ã䜿ã£ãŠããããšã«ãªããnonce ãèŠã€ããŠãç¡å¹ã«ãªããšããããšã§ãã
ãŸããèªåããæ©ããnonce ãèŠã€ããïŒããšãã人ãããå Žåãèšç®ãç¶ããŠã黿°ãæéã®ãªãœãŒã¹ïŒðïŒãç¡é§ã«ãªã£ãŠããŸããŸããnonce ã none ã«ãªã£ãŠããŸããŸãã®ãã
ããã§ãã€ããŒïŒãã€ãã³ã°ãã人ïŒã¯ãæ¬åœã«èŠã€ããã®ãã確èªããäœæ¥ãè¡ããæ£ãããã°æ©ã ã«ãããã¯ãã§ãŒã³ãæŽæ°ããŠã次ã®ç»é²åŸ ã¡ããŒã¿ã®ãã€ãã³ã°ãå§ããã®ã§ãã
ãã®ä»çµã¿ã«ããããããã¯ã»ãã§ãŒã³ã®éäžã«ããããŒã¿ãæ¹ããããããšããå Žåã倧å€ãªã³ã¹ããçºçããŸãã
æ¹ãããããããã¯ããåŸã®ãããã¯ã®ããã·ã¥å€ã®èšç®ã ãã§ãªã nonce ã®å€ãŸã§ãã¹ãŠåèšç®ããŠãªãªãŒã¹ããªããšãããªãããã§ããããã ãã§ãªããäžçäžã®ãã·ã³ã«æ£ãã°ã£ããããã¯ã»ãã§ãŒã³ã®ããŒã¿ã«ãäžæ£ã¢ã¯ã»ã¹ããŠæžãæããå¿
èŠããããŸãã
ããããæ¹ããããŠåèšç®ããããä»ã®ãã·ã³ããããã³ã°ããŠããŒã¿ãã¯ã©ãã¯ããŠããéã«ãããã»ã©éçã£ãŠãããããã¯ãã§ãŒã³ã§ãªãéãããŒã¿ã¯ã©ãã©ãé·ããªãæŽæ°ãããŠãããŸããæ¹ãããããæãäžãã¥ããç¶æ³ãäœãããã®ã§ãã
ãããã³ã€ã³ã®å Žåã¯ããŠã©ã¬ããéã®ç§»åãããïŒååŒãããïŒãã³ã« 10 åããã«é·ããªã£ãŠè¡ãã®ã§ããšããŠãéã«åããªãã®ãããããšæããŸãã
ããã«ã2020 幎 07 æã®çŸåšã®ãããã³ã€ã³ã®ãããã¯ãã§ãŒã³ã®é·ãã¯çŽ 270 GB ã§ãããããæ¹ããããã«ã¯ã10 å以å
ã«ãæ¹ããç®æä»¥éã®å
šãŠãã® nonce å€ãèšç®ããå¿
èŠããããŸããããããèå¿ã® nonce æ¢çŽ¢ã¯ 1 ã€èŠã€ãããŸã§ã« 10 åååŸã«ãªãããã«èªå調æŽãããŠãããããããªãé£ããããšã宿ã§ãããšæããŸãã
ã€ãŸããããŒã¿ãæ¹ããããŠå°éã皌ãããã¯ãã€ãã³ã°ããæ¹ã皌ããããšããããšã§ãã
ãããŠãåœç¶ãããã®åŠçã¯èªåã§è¡ãããŸããã€ãŸããã¹ãã ã¡ãŒã«ïŒãã£ãã·ã³ã°ïŒè©æ¬ºååïŒãŽãèšäºã®åºååå ¥ãªã©ãåçŽäœæ¥ãèªååããŠãæ°ãæã£ãŠèå©å€å£²ã§çšŒãããšããæãªããã®ææ³ã䜿ã人ã«ãšã£ãŠã¯ã楜ããŠçšŒãããææ³ã® 1 ã€ã«ãªããŸãã
ãããããä»äººã®ãã€ãã³ã°çµæã®ç²æ¢ãããçµæãšããŠãããã¯ã»ãã§ãŒã³ã®æ£åœæ§ïŒããŒã¿ã®ããã·ã¥å€ãåãã§ããããšïŒãä¿èšŒããããšã«ãªããŸãããã®ãããããã¯ã€ãããããããŠã£ã³ã»ãŠã£ã³ããšãªããŸãã
ç¯çœªå¿çåŠã§ã¯ãéã¥ããšãªããµãŒãã¹ã«ã¯æªãã¯ããªãããšããã®ããããŸãã倧åã®å¯çè«ããã¹ããæ®ºããªãã®ãšåãè¡åã§ãã
æå ã«ãã倧éã®ããã·ã¥å€ããã ã®ãŽãã®æ°å€ã«ãªããããªããããã¯ãã§ãŒã³èªäœããã¡ã«ãªãæªãã¯ããªãããšãããäžå°èŠæš¡ã®æªå ã®ç¯çœªå¿çåŠãéæã«å¿çšãããæµã峿¹ã«ä»ããæå¹ãªïŒé¢çœãïŒæŠå¿µãªã®ã§ãã
ãã¡ãããåœå®¶ã¬ãã«ã®è³éãããå€§èŠæš¡ãªæªå ããçžæãïŒå¥ã®ã³ã€ã³ãïŒæœ°ãããã«é¬Œã®ãããªãã·ã³ã倧éã«çšæã§ããã°ã以äžã®æ»æã§ãããã¯ãã§ãŒã³ãæ¹ããããŒã¿å ¥ãã§æŽæ°ãããããšã¯ã§ããŸãã
- æ¹ããåŸãæ®ãã®ãã¹ãŠãåèšç®ããçŸåšã®ãããã¯ã»ãã§ãŒã³ããå°ãã ãé·ããã§ãŒã³ãäœæããŠããã
- ããŒãã®éåæ°ãçµèšããŠã次ã®ãªãŒããŒã誰ã«ãããåæããŠãããæç¥šãæåã§è¡ããããã«ã¢ããªããããã
- 次ã®ãªãŒããŒäºå®ã®ããŒãã¯ãäžèšã®æ¹ç«ãããã¯ãã§ãŒã³ãæã£ãŠã¹ã¿ã³ãã€ããŠããã
- çŸåšã®ãªãŒããŒã« DoS æ»æãããŠããŒããããŠã³ãããã
- æç¥šãå§ãŸã£ãããäºå®ãããŠããããŒãã«ããŒãã®éåæ°ãæç¥šããã
- ãªãŒããŒãïŒæªãæ¹ãžïŒå€ããããããã¯ãã§ãŒã³ã®é·ããéãïŒé·ãïŒã®ã§ãä»ã®ããŒãã¯åæãå§ããã
åœç¶ nonce ã®ãã€ãã³ã°ã§ãªãéå»ã®ããŒã¿ã®æ€èšŒã ããè¡ã人ãåºãŠããŸããããããç°è°ãå±ããŠãããã€ããªãã£ã§ãããããéåæ°ã®åã«ã¯è² ããŠããŸããŸãããã®ãããªæ»æãã51% æ»æããšåŒã³ãŸããïŒè©³ããã¯åŸè¿°ããŸãïŒ
ããããå©çšè ãå€ããã°å€ãã»ã©ããŸãå€çš®å€æ§ãªäººãããã°ããã»ã©ããã®æ»æã¯ãã¥ãããªããŸãã
ãã®ããã«ããããã¯ã»ãã§ãŒã³ã¯ãè€æ°äººã§ãã§ãã¯ãããããã§ãã¯ããŠããã£ããæ©ãè
åã¡ã§å ±é
¬ãäžãããããã§ãŒã³ã®é·ããã»ãã¥ãªãã£ã«ã€ãªããããå©çšè
ãå€ããã°å€ãã»ã©å
ç¢ã«ãªãããDB ã®ããã¯ã¢ããïŒã³ããŒïŒãããŠããã人ã«ã¯ã€ã³ã»ã³ãã£ã
ãã®ãããŒã¿ã®ããã·ã¥å€ã確èªã nonce ã®å€ãæ¢ãããããä»è
ãç²æ¢ãïŒæ€èšŒïŒãããåé¡ãªããã°åã
ã®ãã§ãŒã³ã«è¿œå ããããããããã«ãŒãã»ãªãã»ã¯ãŒã¯ãïŒãä»äºã®èšŒæããããã¯ãä»äºã«ãã蚌æãïŒãšåŒã³ãŸãã
nonce ã®ã²ãŒã ãšããŒã¯ã«ã®ããºã«
ããŒã¹ãã¬ããã³ã°ããããnonce æ¢çŽ¢ããããçŸåšã®ã»ãã¥ãªãã£ã®ããŒã¹ã«ããã®ããæªãããããäººã«æéãããããããããšã§ãã
äŸãã°ãæå·åããã 1 ããŒã¿ãã¯ã©ããã³ã°ããŠåŸ©å·ããã®ã« 1 ã¶æããããšããŠãã©ããªå°ããªããŒã¿ãæå·åãããŠããå Žåããã¯ã©ããã³ã°ããåŽã¯ãã£ãŠãããªãããšãããããªç¶æ³ãäœãã®ãåºæ¬ã§ããChrome ãã©ãŠã¶ãªã©ãããã©ã«ãã§ https ã«ããã®ãåãçç±ã§ãã
ããŠãããã§ãããŒã¯ã«ã®ããºã«ãã«ã€ããŠèª¬æããããšæããŸãã
ãããŒã¯ã«ã®ããºã«ããšã¯ãå ¬é鵿å·ãæå·åŠçããã·ã¥ã®çš®ããŸããŠããäŸã®ããŒã¯ã«æ°ãèãããããºã«ã䜿ã£ããäºäººã®å°è»åé¡ãã® 1 ã€ã®è§£ãã§ããWikipedia ã«ãããšä»¥äžã®ãããªèª¬æããããŠããŸãã
ããŒã¯ã«ã®ããºã«ïŒè±: Merkle's PuzzlesïŒãšã¯ãã©ã«ãã»ããŒã¯ã«ã 1974 幎ã«èæ¡ããåæã®å ¬é鵿å·ã·ã¹ãã ã§ããã1978 幎ã«çºè¡šããããäºåã«ç§å¯ãå ±æããŠããªããšããã¡ãã»ãŒãžã亀æããããšã§ç§å¯ãå ±æã§ããæ¹åŒã§ããã
ïŒããŒã¯ã«ã®ããºã« @ WikipediaïŒ
ããã§æ³šç®ããŠæ¬²ããã®ããäºåã«ç§å¯ãå ±æããŠããªããšããã¡ãã»ãŒãžã亀æããããšã§ç§å¯ãå ±æã§ããæ¹åŒãã®äžæã§ãã
ããã¯ãäºäººã ãã®ç§å¯ããšèšãç¹ã§ãå ã®ãå ¬ééµã»ç§å¯éµæå·ãã«ãèšããããšã ãããäºäººã®å°è»åé¡ãã«ãèšããå 容ã ãšæããŸãã
ãã®ããºã«ã®ã·ãã¥ãšãŒã·ã§ã³ã§ããããé¢ãé¢ãã®ã¢ãªã¹ãšããããã¡ãã»ã³ãžã£ãŒãšãªããã£ãŒãªãŒã«ãã¬ãã«ç§å¯ã®ã¡ãã»ãŒãžãéãããšãã§ãããããšèšãç¶æ³ã§ãããã ããŸããŸã§ããã
ããã§ããŒã¯ã«ã¯ãããºã«ã䜿ã£ãæ¹æ³ã§è§£æ±ºããããšããŸãã
ãŸããããã¯ãããããé£ãããé©åºŠãªæéïŒäŸãã° n æ¥ïŒã§è§£ããããºã«ãããããçšæããŠã¢ãªã¹ã«éããŸããã©ã®ããºã«ããããºã«ãè§£ããšãäžæã®ãæå·éµããšãèå¥ IDãããããããã«ãªã£ãŠããŸãã
ããæ¥ãããã«ç§å¯ã®ã¡ãã»ãŒãžãéããããªã£ãã¢ãªã¹ã¯ãããããããã£ããããããã®ããºã«ãã 1 ã€ã©ã³ãã ã«ããã¯ã¢ããããŠããºã«ãè§£ããŸãã
ãããŠãããããåŸãããæå·éµã§ã¡ãã»ãŒãžãæå·åããŠãèå¥ ID ãšäžç·ã«ã¡ãã»ã³ãžã£ãŒã®ãã£ãŒãªãŒã«èšããŸãã
ãã£ãŒãªãŒã¯ãã£ãããšçèŽããããšæãããã©ã®ããºã«ã䜿ããããåãããŸããã
ããã§ãã£ãŒãªãŒã¯ã圌ãå¯äžããã£ãŠããæ å ±ã§ãããèå¥ IDããããããããŸã§ããã®ããºã«ã 1 〠1 ã€è§£ããŠãããªããšçèŽïŒåŸ©å·ïŒã§ããŸããã
åé¡ã¯ããºã«ãè§£ãã®ã« 1 ã€ããã n æ¥ãããããšãšããããéãã€ããŠãããºã«ã峿žå®€ãåãŸããããã®æ°ã§ãããããã宿çã«æ°èŠããºã«ãéãããŠããããããå®è³ªçã«ç¡çããšèšãç¶æ³ããããŸãã
ãã¡ããçæ§ã¯ã©ã¹ã®åœä»€ã§ãããå人ãåæã«ããºã«ãè§£ããããªð
ã©ãã§ãããããããã¯ãã§ãŒã³ã® nonce æ€çŽ¢ããããŒã¯ã«ã®ããºã«ãã«è¿ãèãæ¹ã ããšããããšæããŸãã
ãå®çŸäžå¯èœãªã¬ãã«ã§æéããããããããããããçŸåšã®ã»ãã¥ãªãã£ã®æ ¹æ¬çãªææ³ã§ãã
ãããã¯ãã§ãŒã³ã®ã»ãã¥ãªãã£
ã¡ãªã¿ã«ãå··ã§äœåºŠããæå·é貚ïŒä»®æ³é貚ïŒãçãŸããããšããäºä»¶ãçºçããŠããŸãããããã¯ãããã¯ãã§ãŒã³ã®ä»çµã¿ã厩ããããã§ã¯ãããŸããã
åçŽã«ãããœã³ã³ãã¯ã©ããã³ã°ãããæå·é貚çšã®ç§å¯éµãçãŸããŠããŸããå¥ã®å£åº§ã«ç§»ãããŠããŸã£ããšãããã¯ã¬ãžããã«ãŒããéè¡å£åº§ã®ãã
ãã® 10 幎ã§ãéè¡ã®ãã©ãã«ããã£ãããšã¯äœåãã£ããèããŠã¿ãŠãã ãããåã ã®ååŒæã®ã¡ã³ããã³ã¹ãäžç¥¥äºãªã©ãé€ãããããã¯ãã§ãŒã³ã»ããŒã¹ã®ã³ã€ã³ã®ååŒèªäœã¯ãã©ãã«ã§æ¢ãŸã£ãããšã¯ 1 床ããªãã®ã§ãã
51%æ»æïŒæ°ã®æŽåïŒ
ãããããããã¯ãã§ãŒã³ã®ã»ãã¥ãªãã£ã§ã·ã¹ãã çã«äžçªæåãªæ»æã 51% æ»æãšåŒã°ãããã®ã§ããäžèšã§èšããšã倿§æ§ã«æ¬ ããéã®ã倿°æ±ºã«ããæææ±ºå®ã®æ å ±æäœãã§ãã
ãããã¯ãã§ãŒã³ã¯ P2P åã§ãããããåºæ¬çã«äž»ãšãªããµãŒããŒãååšããŸãããåã ããã¢ãã€ãŸããµãŒããŒã§ããã¯ã©ã€ã¢ã³ãã§ããããã§ãã
ãšã¯ãããP2P ãããã¯ãŒã¯å ã§ã代衚ã§ããŒã¿ã远å ããããªãŒããŒã»ããŒãããããŸãããã®ãªãŒããŒã¯ããªãŒããŒã«è¿œéãããã©ãã¯ãŒïŒãããã¯ãã§ãŒã³ãåæããåŽã®ããŒãïŒã®éžæã®å€æ°æ±ºã§æ±ºãŸããŸãããŸããããŒã¿ã远å ãããã®æææ±ºå®ããã©ãã¯ãŒã®å€æ°æ±ºã§æ±ºããããšã«ãªããŸãã
ãããŒãããšã¯ããã¢ã®ãã¡ãµãŒãã¹ãæäŸããŠããç¶æ ïŒãµãŒããŒç¶æ ïŒã®ãã¢ãèšããŸããããã§ã¯ãå è¿°ããããã«åæ£åæãããåã ã®ãããã¯ãã§ãŒã³ã® DB ãµãŒããŒã®ããšã§ãã
åããŒãïŒãµãŒããŒïŒã«ã¯ãåã ãã€ããŒïŒãã€ãã³ã°ãã人ïŒããŠãŒã¶ãŒïŒãããã¯ãã§ãŒã³ã«ããŒã¿ã远å ããã人ãäŸãã°ä»®æ³é貚ã®å Žåã¯ååŒå 容ãç»é²ããã人ïŒãæå±ããŠããŸãã
ãã®æãééã£ãç»é²å 容ã§ãã£ãŠãããŒãããã€ããŒã®éåæ°ããåé¡ãªãããšçãããšç»é²ãããŠããŸãã®ã§ããããã§èšããééã£ãããšèšãã®ã¯ãããã·ã¥å€ãåããªãããŒã¿ã§ã¯ãªããããŒã¿ãã®ãã®ãæ¹ç«ããç©ãèšããŸãã
ãªãã§ããããšèšããšããã®å€æ°æ±ºã§æ±ºãŸã£ããªãŒããŒããã®ä»²éã ã£ãã远å ããæš©éãããããã§ãã
ã€ãŸããçŸå®äžçã®å€æ°æ±ºãšåãããã«ãæ°ãšè³ç£ïŒåŠçèœåïŒãæã£ãçµç¹ã§ã³ã³ãããŒã«ããããšãã§ããŠããŸãã®ã§ãã
ð Â è³æ¬äž»çŸ©ãšç¯çœªåŠã®èгç¹ããã¯ãæ®å¿µãªããšã«ãããã¯ã»ãã§ãŒã³ãä»®æ³éè²šïŒæå·é貚ïŒã«äœ¿ãã«ãæããããåé¡ãåºãŠããŠããŸãã
ãããã³ã€ã³ã®å Žåããã€ãã³ã°ã«ãããæéïŒ
nonceãçºèŠããããŸã§ã®æéïŒãèªåçã« 10 åååŸã«ãªãããã«ã«ãŒã«ïŒãŒãã®åæ°ïŒã調æŽããŠããŸããéã«èšãã°ããã·ã³ã»ãã¯ãŒãæã€äººãåžžã«åªäœã«ãªããšããããšã§ãã
ãä»ãããã€ãã³ã°äºæ¥ãå§ããŠãå²ããå°ãªãããšèšãããã®ã¯ãåæã®ããããã«ãŒã«ã«ããããŠèšåæè³ããŠããäººãšæ¯ã¹ãå¿ èŠãªãã·ã³ã¹ããã¯ã®è²»çšå¯Ÿå¹æãèãããã§ãããããªããšããã§ã«è³æ¬ïŒãã·ã³ãã¯ãŒïŒãæã£ãŠãã人ã«ãã皌ããªãåå£ãã§ãã€ã€ãããŸãããã£ããã®ãå°æªå ã峿¹ã«ä»ãããä»çµã¿ã厩å£ããå¯èœæ§ãããã®ã§ãã
ãŸãããã€ããŒïŒãã€ãã³ã°ãã人ïŒã®ãã©ãšãã£ãå°ãªããšãã€ã¬ã®ã¥ã©ãŒæã«å šæ» ããå¯èœæ§ãé«ããªããŸããç¹ã«äžèšã® 51% æ»æãããããããªã£ãŠããŸããŸãã
ãããã£ã倿§æ§ã®æ¬ èœåé¡ã«å¯ŸããŠããã€ãã³ã°ã®åŠçã忣ãããŠãè³æ¬ãå°ãªãïŒãã·ã³ã»ã¹ããã¯ãäœãïŒäººã§ããã€ãã³ã°ã«åå ã§ãããããªä»çµã¿ãåºãŠããŸãããäºä»¶ã«ããªã£ã Coinhive ãªã©ã§ãããã®äºä»¶ã¯ Winny ãšåãããç¯çœªã®æž©åºãšãªãããããããšæ€æãããäºäŸã§ãã©ã¡ããç¡çœªãšã¯ãªã£ããã®ã®ãã©ã¡ãããè³¢ããªã人ããããºã«è³¢ããããããšè¿·æããããã»é æ ®ã«æ¬ ããããšã«ããåŒå®³ã§ãéçºè ãããã¯æè¡ãã®ãã®ããããããªãåããäºä»¶ã§ããã©ã¡ãã®æè¡ãã忣æè¡ã«ãããéèŠãªãã®ãã§ã¯ãããŸããã
ãããã®è£å€ãã¢ã³ãè³æ¬äž»çŸ©ïŒè³æ¬ãæã£ãŠãã人ãè ããèãæ¹ïŒã«å¯Ÿãã匟å§ãšãŸã§ã¯èšããŸããããå°ãªããšã Winny ã®ä»¶ã¯æ¥æ¬ã®åæ£æè¡ãäžçããé ããçç±ã§ã¯ãããŸãã
ãè³¢ããªã人ããè³¢ã人ã«ãéãéãŸããããšãè³æ¬äž»çŸ©ã®ç¹åŸŽã®ïŒã€ãšä»®å®ãããšãç¯çœªã«ãããè³æ¬äž»çŸ©ã¯ãè³¢ããªã人ãããºã«è³¢ã人ã«ãéãæµããä»çµã¿ããšãèšããŸããã€ãŸããè³¢ããªãæäžã«ãã·ã³ãèµ°ããããºã«è³¢ãå ç· ãã«æµããä»çµã¿ããçãŸããŠããŸããç¯çœªçµç¹ã®çéã®ä»çµã¿ã§ããã€ãŸãããã€ãã³ã°ããåŸãã¯ãªãŒã³ãªè³éãç¯çœªçµç¹ã®è³ç£ã«ããªããããšããããšã§ãã
ãããããããã¯ãããã¯ã»ãã§ãŒã³ã«éãããèªåçã«ãéãçºçãããšå¿ ãèµ·ããåé¡ã§ãããã®ããããããã¯ã»ãã§ãŒã³ã®ä»çµã¿ãšã¯åããŠèããã¹ãã§ãã
ããŠãDB ã®æ¹ããã«ã¹ããããåœãŠããšãäžç¹å®å€æ°ã§å€æ§æ§ã«å¯ãã çµç¹ã«ãããŠã¯ãäžèŠãããã¯ã»ãã§ãŒã³ããã¹ããªæ¹æ³ã«èŠããŸãã
ããããnonce ã®ããã«ãããããæéããããããšã§ã»ãã¥ãªãã£ãé«ããŠãããä»çµã¿ã§ãã以äžããããã¯ã»ãã§ãŒã³ã¯é
ãã®ã§ã±ãŒã¹ã»ãã€ã»ã±ãŒã¹ïŒé©æé©æïŒãšèšãããšæããŸãã
ãŸãããããã¯ã»ãã§ãŒã³ãã忣å°åž³ããšãåŒã°ããããã«ãDB ã®åæ£ã«é¢ããŠã¯ãããã·ã¥é¢æ°ãšã¯å¥ã®è©±ããªã®ã§å²æããŸããã以äžã®ããã«ãããã¯ã»ãã§ãŒã³ã«ã¯ããã·ã¥é¢æ°ã®ç¹åŸŽãååã«æŽ»ããããŠããã®ãããããšæããŸãã
ãããã«ããŠãããã®æ§å説ïŒçžæãä¿¡çšããïŒã§ãªãæ§æªèª¬ïŒæªå ã¯æ¥œãããŠçšŒããæ¹ãéžã¶ïŒãéæã«åã£ã瀟äŒçãªå¿çãå å³ãããã«ãŒãã»ãªãã»ã¯ãŒã¯ã®ä»çµã¿ã«ãããA â B ãžã®ïŒé ããã©ïŒæ£ç¢ºãªããŒã¿ã®äŒéãå¯èœã«ãªã£ããã®ãããã°ã©ããšããŠé¢çœããªãŒããšæããšããã§ãã
- 䜵ããŠèªã¿ããïŒãGitãšãããã¯ãã§ãŒã³ã®é¢ä¿ã@ Qiita
ãããã¯ãã§ãŒã³ã®ç°å¢åé¡ã«ã€ããŠ
ãããã¯ãã§ãŒã³ããåŸè¿°ãã NFT ã«ã€ããŠèªãå Žåãå¿
ããšèšã£ãŠè¯ãã»ã©ç°å¢åé¡ãåãäžããããŸãã
ããã¯ããããã¯ãã§ãŒã³ã® PoWïŒãã«ãŒãã»ãªãã»ã¯ãŒã¯ïŒã®åŠçã«ãããŠã黿°ãé£ããããã®ã§ç°å¢ã«æªãããšããæèŠã§ãã
確ãã«ãããã¯ãã§ãŒã³ã¯ããã«ãŒããã©ãŒã¹ç¥ãç¶æ
ãã€ãŸããnonce ã®å€ãæ¢ãããã ãfor ã«ãŒããèµ°ããããããããã®ããŒã¿ã«ã®æ¶è²»é»åã¯éŠ¬é¹¿ã«ã§ããŸããã
ãããã³ã€ã³ã§èšãã°ãã¡ãã£ãšããåœ 2 ã€ã¶ããããã®æ¶è²»éãšèšãããŸãããã®ããããã®é»æ°æ¶è²»éã¯ç¡èŠã§ãããã®ã§ã¯ãããŸããã
ãããããã«é¢ããŠçµè«ïŒããããã¯ãã§ãŒã³ã¯ç°å¢ç Žå£ãªã®ãããšããåé¡ã®çãïŒãåºãã«ã¯ææãæ©ããããŸããŸãªæèŠãããã®ã§ãããçè ã® 1 æèŠãè¿°ã¹ãããšæããŸãã
çããå
ã«èšããšããããã¯ãã§ãŒã³ã®å
ç¢æ§ã¯èªç¥ãããŠããŠããã®ã ããã黿°ã倧éã«æ¶è²»ããªãæ¹æ³ãèããã°ããããšããããšã§ããåŸè¿°ããã€ãŒãµãªã¢ã ã® PoSïŒãã«ãŒãã»ãªãã»ã¹ããŒã¯ïŒãªã©ã®æ¹è¯çãããã«åœãããŸãã
nonce æ¢çŽ¢ãšããã²ãŒã ã®ãããªãã®ã«é»æ°ãé£ããšã¯ãããæ±ºããŠæå³ã®ãªãåŠçãçç£æ§ã®ãªãåŠçãããŠããããã§ã¯ãããŸããã
æ¬è³ªçã«ãããã¯ã忣ããŒã¿ã®æ¹ç«é²æ¢ã®ããã®åŠçããšããŠé»æ°ãé£ã£ãŠããããã§ãããããŠãããããåŸãããã¡ãªããã¯ãäžå€®éæš©åã§ã¯ãªããããšãç¶æã§ããããšã§ãã
ã€ãŸã 1 瀟ãåç£ããããµãŒãã¹ãæ¢ãããšãå
šãŠããªãã£ã
æããã«èšããšããµãŒãã¹ãšããããã¯ã€ã³ã¿ãŒãããã«è¿ããã€ã³ãã©ããªã®ãããããŸããã
éã«ãGAFAå§ããäžå€®éæš©åã®ãµãŒãã¹ãã®æäŸåŽãšå©çšåŽãæ¶è²»ããé»åã¯ã©ããªã®ããèããªããšãããªãããšããããšã§ãã
ããã§ãå
ã®ããã¶ã³ãã³å°è»åé¡ããšãããŒã¯ã«ã®ããºã«ããæãåºããŠãã ãããã€ãŸãããã®åé¡ã解決ã§ããã®ã§ããã°ãå¥ã« PoWïŒãã«ãŒãã»ãªãã»ã¯ãŒã¯ïŒ ã«åºå·ããå¿
èŠããªãã®ã§ãã
äºå®ãã€ãŒãµãªã¢ã ãªã©ã®ãããã¯ãã§ãŒã³ã¯ PoSïŒãã«ãŒãã»ãªãã»ã¹ããŒã¯ïŒãæ¹è¯ããŠæ¶è²»é»åã倧å¹
ã«æžãããŠããŸãã
PoWïŒãã«ãŒãã»ãªãã»ã¯ãŒã¯ïŒãš PoSïŒãã«ãŒãã»ãªãã»ã¹ããŒã¯ïŒã®éã
PoWïŒãã«ãŒãã»ãªãã»ã¯ãŒã¯ïŒãš PoSïŒãã«ãŒãã»ãªãã»ã¹ããŒã¯ïŒã¯ãã©ã¡ãããnonce ã®æ¢çŽ¢ããšãããã·ã¥å€ã®ãã§ãã¯ãããããã®çµæãä»ã®ããŒãã®å€æ°æ±ºã§æ¿èªã»ç»é²ããç¹ã§ã¯åãã§ãã
PoW ãš PoS ã®éãã¯ããã§ãã¯äŸé Œãããå
ã®èãæ¹ã®éãã«ãããŸãã
åŸæ¥ã® PoW ããnonce æ¢çŽ¢ãè¡ãã®ã¯èª°ã§ãããããæ©ããã®åã¡ãã誰ãä¿¡çšããªããã§ããã®ã«å¯ŸããPoS ã¯ãnonce æ¢çŽ¢ãè¡ãã®ã¯ã©ã³ãã ã«æå®ãããããŒããã§ãä¿¡çšãšããè³ç£ïŒsteakïŒãéèŠãããŸãã
ã©ãããããšãã
PoS ã® S 㯠steak ã®ããšã§ãè³ç£ããå©å®³é¢ä¿ããå·®ãåºãããæäŸããããšãã£ãæå³ãæã¡ãŸãã
ããããæ¯ã®ããèšãæ¹ã§ãããå ã®ãéã¥ããšãªããµãŒãã¹ã害ããªããå¿çããå¯çè«ã¯ãã¹ããæ®ºããªãããšããèããããã«çºå±ããããè³ç£ãå€ãæã£ãŠããæ¹ã倱ã£ãéã®ãªã¹ã¯ãå€ãã®ã§ããã®è³ç£ã«å¯ŸããŠçé¢ç®ã§ããããšããèãæ¹ã«ã·ããããŠããŸãã
äŒæ¥ãæ ªäž»ãã¹ããŒã¯ãã«ããŒãšèšãã®ãšåãã§ãå€§æ ªäž»ã®å£°ã倧ããæ±ãããã®ãåãã§ãããããŠãè³ç£ãã¯ãæ ªããšããä¿¡çšã®ããçŽåãã«ãªããŸãã
PoS ã§èšããè³ç£ããšã¯ãã³ã€ã³ã®ãä¿æéããšããããŸã§ã®ååŒéã«ãããä¿¡çšåºŠãã§ããäžèšã§èšãã°ãå®çžŸãã§ãã
ãŸããPoW ã¯èª°ã§ããã€ãã³ã°ïŒnonce æ¢çŽ¢ïŒã«åå ã§ããæ©ãè
åã¡ãã ã£ãã®ã«å¯ŸããPoS ã®å Žåã¯ãã€ãã³ã°ãè¡ãããŒãã¯ãã©ã³ãã ã«ããæåãå¶ã§ãã
ãšã¯èšããã©ã®ããŒãã§ãããããã§ã¯ãããŸããããã§ãã¯äŸé Œå
ã®ããŒãã®ãå®çžŸããäœãã£ãå Žåã¯ãããã«ä»ã®ããŒãã«ããã§ãã¯äŸé ŒããŸããã€ãŸããä»ã®ããŒããšæåããã¶ãã€ã³ã»ã³ãã£ã
éã«èšãã°ãã³ãã³ããšçé¢ç®ã«åŠçããŠããã°ä¿¡çšåºŠãããããåŸã ã«ã€ã³ã»ã³ãã£ããå€ããªããŸãã
ããã«ãããæ©ãè
åã¡ã§ç¡é§ã®å€ãã£ã nonce æ¢çŽ¢ã®æ¶è²»é»åãåçã«å°ãªããªããŸãããŸããã©ã³ãã ã§ããããããã·ã³ã»ã¹ããã¯ã®äœãã£ãããŒãã«ããã£ã³ã¹ãåã£ãŠããŸãã
ãã®æŠå¿µããããã«æ¹è¯ããŠåãå ¥ããããšããŠããã®ããã€ãŒãµãªã¢ã ããªã©ã®ä»®æ³éè²šïŒæå·è³ç£ïŒã§ãã
ããŠãæ¶è²»é»åã®è©±ãã§ãããããããè¿ãå°æ¥ããããããã® nonce æ¢çŽ¢ã䜿ããªãæ¹æ³ãåºãŠãããšæããŸããäŸãã°å
ã®ãã€ãŒãµãªã¢ã ã㯠PoS ã«ãããŠå®èšŒå®éšãè¡ã£ãŠããŸãã
ãã®ããããããã¯ãã§ãŒã³ã®æè¡ãšãæå·è³ç£ïŒãããã³ã€ã³ãã€ãŒãµãªã¢ã ã®ã³ã€ã³ïŒã¯å¥ã®ãã®ãšããŠèããããšã倧äºã§ãã
ãã®äžã§ãç°å¢åé¡ããèŠããšãæå·è³ç£ãšããŠã®çžå Žãç œãããã«åé¡ã«ããŠãã人ãè£ã«ããããã«æããŠãªããŸããã
NFTãšã¯ = IPFS + ãããã¯ãã§ãŒã³ïŒ
ããŠããããŸã§ãããã¯ãã§ãŒã³ã IPFS ã®è©±ããããŸããããã®ä»çµã¿ã®å¿çšãšãããããã·ã¥ã¢ããïŒåããæïŒã®æ°ãã詊ã¿ã« NFT ãšãããã®ããããŸãã
ãšã¯èšããNFT ã®æŠå¿µèªäœã¯ 2012 幎ã«ã¯ååšããŠããŸãããæ°åã³ããã®æµè¡ã£ã 2021ã2022 幎ã«ãããŠè©±é¡ã«ãªã£ãã®ã§èšæ¶ã«æ°ããæ¹ãå€ããããããŸããã
ãŸã㯠NFT ã®å®ç©ãèŠãŠã¿ã
äœã¯ãšãããããNFT ãšããã°ããšãããã®ãå®éã«èŠãŠã¿ãŸãããã
è³æ £ããªãçšèªãå€ãåºãŠãããšæããŸãããåã ã®çšèªã®èª¬æããäœãããŠãããã¯è¿œã£ãŠèª¬æããŠè¡ããŸãããŸãã¯ãè³æ £ããªãçšèªãè³ã«éŠŽæãŸããçšåºŠã®æèŠã§ããèªã¿ãã ãããå¯èœãªã PC ãã©ãŠã¶ã§è§Šããªããããã¹ãã ãšæããŸãããŽãå¯ããŠãããªããè³å æäœããªããããæãªæã«è§Šã£ãŠã¿ãŠäžããã
äžççã«æåãªãªãŒã¯ã·ã§ã³ããŠã¹ã®ã¯ãªã¹ãã£ãŒãºã§ã2021 幎㮠3 æã«ã6,930äžãã«ïŒæäŸ¡ 75 ååïŒã§èœæããã NFT äœåã§ãã
- "EVERYDAYS: THE FIRST 5000 DAYS" by Beeple @ Christies Online
äžèšã¯ãªã¹ãã£ãŒãºã®ãµã€ããéããšãäœåã®ãµã ãã€ã«ã衚瀺ããããšæããŸãã
ãã®äœå㯠BeepleïŒæ¬å: Mike WinkelmannïŒãšããäœå®¶ããã®ãã®ã§ãã圌èªèº«ã® "EVERYDAYS" ãšããã1 æ¥ã
Beeple æ°ã¯æ§æ Œã¯æãããã®ã®ãã©ããã€ãµãããæããæŒããåªã³ãªãå§¿å¢ã®ã¢ã³ããŒã°ã©ãŠã³ããªäœå®¶ã§ãäžéšã®ããã¢ã«ã¯äººæ°ã§ããïŒãšã¯èšã£ãŠãããã§ã« 180 äžäººã®ãã©ãã¯ãŒãããããæåãã©ã³ããã¢ãŒãã£ã¹ããšãã³ã©ãã¬ãŒã·ã§ã³ããŠããã®ã§ã¢ã³ããŒã°ã©ãŠã³ããšãèšããªãã®ã§ããïŒã
ãããŠããã®äœåã話é¡ã«ãªã£ãã®ã¯ããããã倩äžã®ã¯ãªã¹ãã£ãŒãºåã® NFT äœåãšããŠåºåããããããšãšã100 ãã«ã§å§ãŸã£ããªãŒã¯ã·ã§ã³ãã6,930äžãã«ã§èœæããããããšã§ãã
å®ã¯ããã®åºåãããäœåã®é«è§£å床ã®ããŒã¿ã¯ IPFS äžã§å ¬éãããŠããŸããã€ãŸãã誰ã§ãäœåã«ã¢ã¯ã»ã¹ããã³ããŠã³ããŒãã§ããŸãã
-
EVERYDAYS: THE FIRST 5000 DAYSã® RAW Jpeg ããŒã¿ïŒ300MB 以äžããã®ã§æ³šæïŒ- CID:
QmXkxpwAHCtDXbbZHUwqtFucG1RMS6T87vi1CdvadfL7qA- ïŒCID ã«ã€ããŠã¯å è¿°ããŠãã IPFS ã®æŠèŠãã芧ãã ããïŒ
- CID:
ã誰ã§ãèŠããã£ãŠããšã¯ã³ããŒãæŸé¡ãããããšãããã ãã§ã¯ãäœã NTF ãªãã ïŒããšãªããšæããŸãã
ããŠãã¢ãŒãã£ã¹ããã¡ãã£ã¢ãåéãããŠããã®ãããã®äœåã®é«è§£å床ããŒã¿ããªãŒã¯ã·ã§ã³ã«åºãããããšæã蟌ãã§ããããšã§ãããéããŸãã
å
ã»ã©ã®ã¯ãªã¹ãã£ãŒãºã®ãµã€ãã§ããµã ãã€ã«ã®äžã«ãã DETAILS ã®é
ç®ãéããŠã¿ãŠãã ããã
ããã«èšèŒãããŠãã token ID ã® 40913 ãšãã 5 æ¡ã®æ°å€ããªãŒã¯ã·ã§ã³ã«åºãããã®ã§ãïŒããããäœã§ãããã¯é ã«èª¬æããŠãããŸãïŒã
ä»ã®çµµç»ãªã©ã®ãªãŒã¯ã·ã§ã³åã® DETAILS ãšå
å®¹ãæ¯ã¹ãŠã¿ãŠãã ããããã®äœåã¯ãä»ã®çµµç»ãšéã non-fungible token (JPEG) ãªããã®ãç«¶
ããããçè§£ããåã«ããŸã㯠NFT ã®æ å ±ãæ¢ãæ¹æ³ããå ¥ããŸãããã
NFT æ
å ±ã®èª¿ã¹æ¹ïŒEthereum ããŒã¹ã® NFT ã®å ŽåïŒ
ã¯ãªã¹ãã£ãŒãºã®åºåããŒãžã«ãã DETAILS ãèŠãã ãã§ã¯ãnon-fungible token ãªããã®ãç«¶ãã«åºãããŠããã以äžã®æ
å ±ããããŸããã
DETAILS ã®ãããã«äžã®é
ç®ã® SPECIAL NOTICE ãèªããšãæ¯æã㯠Ether ã§ãæ¯æããããšãããããŸãã
Ether ã¯ä»®æ³é貚㮠1 ã€ã§ãEthereum ãããã¯ãã§ãŒã³ãå©çšããæå·è³ç£ã§ãããã®ããšãããä»åã®äœå㯠Ethereum äžã®ãããã¯ãã§ãŒã³ã«ç»é²ããã NFT ã§ããããšãããããŸãïŒãããã¯ãã§ãŒã³ã®æŠèŠã¯å
è¿°ããŠããã®ã§ããã¡ããã芧ãã ããïŒã
ãã®ãããä»ã¯ Ethereum ããŒã¹ã§èª¬æããŸãããNFT ãæ§æããæ
å ±ã®ãããŒãã€ã³ããã¯ãã©ããåããªã®ã§ãæ°ã«ãªã NFT ãµãŒãã¹ãããã°è©²åœããçšèªã«çœ®ãæããŠäžããã
ãŸãã¯ãäžèšã§ãè¿°ã¹ãŠããã¯ãªã¹ãã£ãŒãºã®åºåããŒãžã®è©³çްïŒDETAILSïŒãéãã以äžã®é
ç®ã確èªããŠãã ããã
-
token ID... Ethereum äžã®äœå IDïŒã¶ã£ã¡ãããããã NFTïŒ -
wallet address... äœå ID ã«çŽã¥ããäœè ã® Ethereum ãŠã©ã¬ããã® ID -
smart contract address... äœåã«çŽã¥ããåãåŒãã®ã«ãŒã«ïŒèªååŠçãããã¹ã¯ãªããïŒã® ID
ãŸãã¯ãNFT ãçºè¡ãã人ïŒãã®å Žåãäœè ïŒã® Ether ã®ãŠã©ã¬ããïŒç§å¯éµã«çŽä»ããå£åº§ïŒã®æ å ±ãèŠãŠã¿ãŸããããEther ãš Ethereum ãæ±ããµãŒãã¹ãªããã©ãã§ã確èªã§ããã®ã§ãããä»å㯠etherscan.io ãå©çšããŸãã
ãŸããã¿ã€ãã«ãã Beeple ã確èªã§ããŸãã
æ¬åœã«æ¬äººã®ã¢ã«ãŠã³ãã§ãããã¯ãããŸããŸãªæ å ±ããç·åçã«å€æããå¿ èŠããããŸããæ®å¿µãªãã Beeple æ°ã®å ¬åŒãµã€ãã«ã¯ãŠã©ã¬ããã®ã¢ãã¬ã¹ãæèšãããŠããªãã®ã§ãä»åã¯ãã¯ãªã¹ãã£ãŒãºã®å ¬åŒãµã€ãããããã³ã°ãããŠããªãããšãåæãšããŠãBeeple æ¬äººã®ã¢ã«ãŠã³ããšããŠè©±ãé²ããŸãããã
次㫠ETH BALANCE ã®é
ç®ã§ããã®ã¢ã«ãŠã³ããææããŠãã Ether éãšãETH VALUE ã§ããã®äŸ¡å€ïŒçŸåšã®çºæ¿ã¬ãŒãããç®åºããç±³ãã«é¡ïŒã確èªã§ããŸãããããããã®ãŠãªã¬ããã®åºçŽåž³ïŒååŒèšé²ïŒãŸã§ãã¿ã€ã ã¹ã¿ã³ãä»ãã§ç¢ºèªã§ãã¡ããã®ã§ãã
ããã¯ãçšå眲ãå¯è£å±€ãªã©ãããããšããšãã§ããªãäºã ãšãæ°ä»ãã§ãããããã€ãŸãããã®ã¢ã«ãŠã³ããææããŠãããšäž»åŒµãããªãããã®ååŒå
容ãŸã§å
šãŠæ
éèŠãªã®ããEther ãå©çšããŠãã Ethereum ã®ãããã¯ãã§ãŒã³ã¯ã忣åã§ãããªãã¯ã§ããã€ãŸããªã³ãã¬ãã¹ã§ã¯ãªãïŒç¹å®ã®äŒæ¥ãå²ã蟌ã¿ãããŠããªãïŒã®ã§ãä»åã®ããã«èª°ã§ãããã€ã§ãããŒã¿ãããŠã³ããŒããåç
§ããããšãã§ããŸãã
ããã§ã¯ã次㫠Ethereum ã®ãããã¯ãã§ãŒã³ããããã®äœåã®åãåŒãæ å ±ãèŠããŠã¿ãŸãã
Ethereum ã® DBïŒãããã¯ãã§ãŒã³ïŒã¯èª°ã§ãããŠã³ããŒãã§ããããããŒã¿ã®èª¿ã¹æ¹ã¯ããã€ãæ¹æ³ãããã®ã§ãããDB ãããŠã³ããŒãããŠãéããç ©éã«ãªãã®ã§ãå ã»ã©ã®ãŠã©ã¬ããã®ç¢ºèªãšåãããã« Web äžããæ€çŽ¢ã§ãã etherscan.io ãéããŠèª¿ã¹ãŠã¿ãããšæããŸãã
ã¯ãªã¹ãã£ãŒãºã®ãµã€ãã«ãã£ããsmart contract addressãã®å€ïŒ0x2a46f... ããå§ãŸãå€ïŒãã³ããŒããŠãäžèšãµã€ãã® "The Ethereum Blockchain Explorer" ã®äžã«ããæ€çŽ¢çªã«ããŒã¹ãããŠæ€çŽ¢ããŸãã
ãããš TransactionsïŒåãåŒãïŒã¿ããéžæãããç¶æ
ã§ããºã©ããšè¡šã衚瀺ããããšæããŸãã
ãã®ãTransactions ã«ããäžèЧã¯äœããã®èª¬æã®åã«ããŸã㯠ContractïŒå¥çŽïŒãšããçšèªãçè§£ããå¿
èŠããããŸãã
ã¹ããŒãã»ã³ã³ãã©ã¯ã
TransactionsïŒåãåŒãïŒã¿ãã®ãå³ 4 ã€é£ã«ãã ContractïŒå¥çŽïŒã¿ããéããŠã¿ãŠãã ããã
- Contract | Address 0x2a46f2ffd99e19a89476e2f62270e0a35bbf0756 | MakersPlace: MKT2 Token @ etherscan.io
Contract Source Code (Solidity) ãšããé
ç®ã«ããªãããè¬ã®ã¹ã¯ãªãããèšèŒãããŠãããšæããŸãã
Contract Source CodeïŒå¥çŽã®ãœãŒã¹ã³ãŒãïŒãšããããã«ããã㯠Ethereum ã®ãããã¯ãã§ãŒã³ã«ããŒã¿ãæžã蟌ãéã«äœ¿ãããã¹ã¯ãªããã®ãœãŒã¹ã³ãŒãã§ãSolidity ãšããããã°ã©ã èšèªïŒã¹ã¯ãªããèšèªïŒã䜿ãããŠããŸãã
æããã«èšãã°ããããã¯ãã§ãŒã³ã«ããŒã¿ãæžã蟌ãéã«å®è¡ããããããããã¯ãã®ãããªãã®ã§ãã
ã€ãŸããæå®ããã Contract ã®ã¹ã¯ãªãããç¡äºå®è¡ããããããã¯ãã§ãŒã³ã«æžã蟌ãŸããããšããå¥çŽããšåŒãã§ããã®ã§ãããããŠãèªååãããŠããããšããããã®ä»çµã¿ã Smart ContractïŒã¹ããŒãã»ã³ã³ãã©ã¯ãïŒãšåŒã³ãŸãã
å®ã¯ããã®ã¹ã¯ãªããã Ethereum ã®ãããã¯ãã§ãŒã³ã«æžã蟌ãŸããŠããŸããä»åã®æäœã¯ããã®äžèº«ïŒãœãŒã¹ã³ãŒãïŒã確èªããããšã«ãªããŸãã
ãã®ãããSmart Contract ã® IDïŒããã·ã¥å€ïŒãåãå Žåã¯ã¹ã¯ãªããã®å
容ãåããšãªãããããããã¯ãã§ãŒã³ã®ä»çµã¿äžãã¹ã¯ãªãããæ¹ç«
éã«èšãã°ããã°ãè匱æ§ãå«ãŸããŠããå Žåã§ãä¿®æ£ããããšãã§ããŸããã
ããã§ã¯ãã¹ã¯ãªãããäœãããŠãããããããããã®ã¹ã¯ãªããã䜿ã£ãŠãããã¯ãã§ãŒã³ã«æžã蟌ãŸããå±¥æŽããããã»ã©ã®ãTransactions ã«ããäžèЧã¯äœããã§ããããšã«æ³šç®ããŸãã
ã€ãŸããä»åã®äœåã«éããããã®ã¹ããŒãã»ã³ã³ãã©ã¯ããå©çšããåãåŒãïŒTransactionïŒãäžèЧã§ç¢ºèªã§ãããšããããšã§ãã
-
Transactions of
0x2a46f2ffd99e19a89476e2f62270e0a35bbf0756@ etherscan.io
åãåŒãããããŒã¿ãæ¢ãïŒå¯Ÿè±¡ãšãªã NFT æ å ±ã®ç¢ºèªãããïŒ
ã芧ããã ããŠããããã«ããã®ã¹ããŒãã»ã³ã³ãã©ã¯ããå©çšããåãåŒãã¯ãããããããŸãïŒDB ç»é²ã¹ã¯ãªããã®å®è¡ãã°ãã€ãŸã TransactionïŒã
ããã§ãä»åã®äœåïŒåãåŒãã®å¯Ÿè±¡ç©ãšãªã NFTïŒãæ¢ã£ãŠã¿ãããšæããŸããã€ãŸããå¥çŽïŒContractïŒã確èªãããšããããšã§ããå®ã¯ãããŒã¿ããŒã¹ïŒãããã¯ãã§ãŒã³ïŒã®æ€çŽ¢ããã¹ããŒãã»ã³ã³ãã©ã¯ãã®ã¹ã¯ãªããã䜿ã£ãŠè¡ããŸãã
å床ãå
ã»ã©ã® Contract ã¿ããéã㊠Code ã®é£ã«ãã Read Contract ãéžãã§ãã ãããå®è¡å¯èœãªã¹ããŒãã»ã³ã³ãã©ã¯ãã®èªã¿åãç³»ã®é¢æ°ïŒã¡ãœããïŒã衚瀺ãããŸãã
-
Read contract of
0x2a46f2ffd99e19a89476e2f62270e0a35bbf0756@ etherscan.io
颿°äžèЧããã23 çªç®ã® tokenURI ãéããšå
¥åãã©ãŒã ã« _tokenId (uint256) ãšããé
ç®ãããã®ã§ãäœåã® token ID ã§ãã 40913 ãå
¥åããQuery ãã¿ã³ã§åãåãããŸããtokenURI ã®é¢æ°ãå®è¡ããããããã以äžã®ãããªçµæãåºããšæããŸãã
ããã§æ³šç®ããŠæ¬²ããã®ããæ»ãå€ã®ãstring: ipfs://ipfs/QmPAg1mjxcEQPPtqsLoEcauVedaeMH81WXDPvPx3VC5zUzãã§ãã
ã€ãŸããDBïŒEthereumïŒã« NFT 40913 ãåãåããããšæååãå€ãšããŠçŽä»ããŠããããããŠããã®å€ã¯ IPFS ã® CID ã ã£ãããšããã ãã®ããšã§ãã
ããã§ã¯ãHTTP ã®ã²ãŒããŠã§ã€çµç±ã§ IPFS ã®ã³ã³ãã³ãã確èªããŠã¿ãŸãããã
ã§ããç»åã衚瀺ãããããšæããããããïŒJSONïŒããšãªããšæããŸãã
ãã®ãŸãŸã§ã¯ãå å®¹ãææ¡ãã¥ããã®ã§æŽåœ¢ãããã®ã以äžã«çœ®ããŸããJSON ã®åèŠçŽ ãã¶ããšãã§ãã¯ããŠã¿ãŠãã ããã
äžã®æ¹ã«ãã raw_media_file èŠçŽ ã®å€ã«ãäœåã®çããŒã¿ïŒé«è§£å床ããŒã¿ïŒã IPFS ã® CID ã§èšèŒãããŠããã®ã確èªã§ããŸãããŸã digital_media_signatureïŒããžã¿ã«ã»ã¡ãã£ã¢çœ²åïŒã«ããã®ç»åã® SHA-256 ã®ããã·ã¥å€ã䜿ã£ãŠããããšã確èªã§ããŸãã
QmPAg1mjxcEQPPtqsLoEcauVedaeMH81WXDPvPx3VC5zUzã®äžèº«
{
"title": "EVERYDAYS: THE FIRST 5000 DAYS",
"name": "EVERYDAYS: THE FIRST 5000 DAYS",
"type": "object",
"imageUrl": "https://ipfsgateway.makersplace.com/ipfs/QmZ15eQX8FPjfrtdX3QYbrhZxJpbLpvDpsgb2p3VEH8Bqq",
"description": "I made a picture from start to finish every single day from May 1st, 2007 - January 7th, 2021. This is every motherfucking one of those pictures.",
"attributes": [
{
"trait_type": "Creator",
"value": "beeple"
}
],
"properties": {
"name": {
"type": "string",
"description": "EVERYDAYS: THE FIRST 5000 DAYS"
},
"description": {
"type": "string",
"description": "I made a picture from start to finish every single day from May 1st, 2007 - January 7th, 2021. This is every motherfucking one of those pictures."
},
"preview_media_file": {
"type": "string",
"description": "https://ipfsgateway.makersplace.com/ipfs/QmZ15eQX8FPjfrtdX3QYbrhZxJpbLpvDpsgb2p3VEH8Bqq"
},
"preview_media_file_type": {
"type": "string",
"description": "jpg"
},
"created_at": {
"type": "datetime",
"description": "2021-02-16T00:07:31.674688+00:00"
},
"total_supply": {
"type": "int",
"description": 1
},
"digital_media_signature_type": {
"type": "string",
"description": "SHA-256"
},
"digital_media_signature": {
"type": "string",
"description": "6314b55cc6ff34f67a18e1ccc977234b803f7a5497b94f1f994ac9d1b896a017"
},
"raw_media_file": {
"type": "string",
"description": "https://ipfsgateway.makersplace.com/ipfs/QmXkxpwAHCtDXbbZHUwqtFucG1RMS6T87vi1CdvadfL7qA"
}
}
}
Token IDãWallet IDãContract ID ã®é¢ä¿æ§
ããŠãããã§å ã«åºãŠãã 3 ã€ã®é ç®ãæŽçããããšæããŸãã
- token ID:
40913 - wallet address:
0xc6b0562605D35eE710138402B878ffe6F2E23807 - smart contract address:
0x2a46f2ffd99e19a89476e2f62270e0a35bbf0756
Ethereum äžã§ Token ID ãªãè¬ã®æ°å€ãçºè¡ãããçºè¡è
ã®ãŠã©ã¬ãã ID ã wallet address ã§ãToken ID ããŽãã§ãŽãã§ããéã«äœ¿ãããããã°ã©ã ïŒã¹ã¯ãªããïŒã® ID ã smart contract address ã§ãã
ãããŠãã©ããã Token ID ã Ethereum ã® NFT ã§ãããšããããšã宿
㯠JSON ããŒã¿ã§ãããŒã¿ã®äžã«äœåã® CID ãèšèŒãããŠããããšãããããŸããã
ã€ãŸããRDB ã®ããã«ãäœå®¶ãäœåã®æ å ±ïŒãŠã©ã¬ããã IPFS ã® CIDïŒãçŽä»ããããŠãããçŽä»ããçè§£ããŠããªããšæ¢ãã®ã«ã倧å€ãªã®ã RDB ãšäŒŒãŠããŸãã
1 〠1 ã€ã®æè¡ïŒããã·ã¥é¢æ°ããããã¯ãã§ãŒã³ã IPFS ãªã©ã®åºæ¬ïŒãçè§£ã§ããŠããªããšããããã説æãã NFT ã®æ¬è³ªã匷ã¿ãçè§£ã§ããŸããããçŽä»ãå ããå 容ã®å€æŽãäžå¯èœãª IPFS ã® CIDãã§ããããšããã€ã³ãã§ãã
ãšèšãã®ããNFT ã«ç»é²ããå€ã¯æååãšããããšã¯ãIPFS ã® CID ã§ã¯ãªã URL ã«ããããšãå¯èœãšããããšã§ããã€ãŸããã³ã³ãã³ãã§ã¯ãªãå ŽæïŒãµãŒãïŒãç»é²ããããšãã§ãããšããããšã§ãã
éã人ã¯ãããå²ã蟌ã¿ããè©æ¬ºã«äœ¿ããã£ãŠããšãããšããæ°ä»ããããããŸããã
URL ã®ãã¡ã€ã³ã»ãªãŒããŒããåŸããé²èЧã課éå¶ã«ããããURL å ã®ã³ã³ãã³ããå ¥ãæ¿ãããã§ããããã§ãã
NFT ãè©æ¬ºèãçç±
売ã人ãããŠãè²·ã人ãããïŒååãšããŠæ±ããïŒãšããããšã¯ææ©å¯Ÿè±¡ã«ãã§ãããšããããšã§ãã
ãã㯠NFT ã«éããŸãããã€ãŸãã転ãããïŒäœ¿ãã®ãç®çã§ãªãã転売æã®å·®é¡ã§å²ããïŒããšãç®çã®å Žåãæ ªã»å ç©ååŒã»äžåç£ã»å€ç©åã»å€åœçºæ¿ã»ãã¬ãŒãã£ã³ã°ã«ãŒãã»æå·è³ç£ãªã©ãšåãããã«ãçµéšãšç¥èïŒéèç¥èãåãæ±ã察象ã®ç¥èïŒããªããšç°¡åã«éšãããã倱æãããããããæ³šæãå¿ èŠãªãã®ã® 1 ã€ã§ãã
çžæãããå²ããããšããæªæ¥ã®èªåãžã®æè³ããšèšã£ãèšèãåºãŠããããïŒæªãã壺ã売ãã€ããŠããïŒããããã®èŠæå¿ãæã€ããã«ããŸãããããã«ã䜿ã£ãããšããªãã®ã«ãèšãããããŸãŸã«è²·ã£ããããžã³ãããšã»ãã«ã ã£ããã¿ãããªããšã«ãªããããŸããã
ãšã¯èšããNFT èªäœã¯ãããžã¿ã«äœåã®ãäœå®¶ã®å©çãå®ãããã«çãŸãããã®ããªã®ã§ãã¡ãããšçè§£ããŠãããããšããã§ãã
ããã§ã¯ãNFT ã¯ãæè¡çã«äœãããŠããã®ããããæè¡çã«äœãé¢çœãã®ãããäžå¿ã«è©±ããé²ããŸããããã奜ããªã¢ãŒãã£ã¹ãã NFT ã§äœåãå
¬éããŠãããªããä»çµã¿ãšèª¿ã¹æ¹ããã£ããçè§£ããäžã§äœå®¶ããããµããŒãããŸãããã
NFT ã®åºæ¬
NFT ãäžèšã§èª¬æãããšãã¢ã€ãã ã®æææš©ã管çãã忣åã®å°åž³ãã§ããæææš©ãšãã£ãŠãæ³çãªææè
ã§ã¯ãªããã¢ã¯ã»ã¹æš©ã®ããã¡ã€ã«ã®ææè
ãã«è¿ãææè
ã§ãã
ã€ãŸããããã®ãµãŒãã¹ã«ãããŠãã¢ã€ãã ID ãšçŽä»ããŠãããŠãŒã¶ãçŸåšã®ææè ãšããããã®ã§ãã
å³å¯ã«ã¯ããã®ã¢ã€ãã ID ãšçŸæç¹ã§çŽä»ããŠããå ¬ééµã®ãã¢ãšãªãç§å¯éµãæã€ãŠãŒã¶ãŒãææè ãšããããã®ã§ãããããã§ãå ¬é鵿å·ã®ãã¢éµã®ãçæ¹ã®éµã§åŠçãããã®ã¯ãããçæ¹ã®éµã®ã¿ã§æ€èšŒã§ãããæè¡ã䜿ãããŸãã
ãšã¯èšãããã£ãŠããããšã¯ã·ã³ãã«ã§ã¢ã€ãã IDãçŸåšã®ææè ã®å ¬ééµãåã®ææè ã®çœ²åãã»ããã§ãããã¯ãã§ãŒã³ã«èšé²ããããšã§ãçŽä»ãããè¡ããç§å¯éµãæã€ãã®ãçŸåšã®ææè ã§ããããšãå®çŸããŠããŸãã
èšé²å ãå ¬éãããã¯ãã§ãŒã³ã§ããã°ãããšã管çè ã§ãã£ãŠãéå»ã®èšé²ãæ¶ãããšã¯ç©ççïŒçŸå®çïŒã«ã§ããŸããã
ãã®ããã«ãã¢ã€ãã ID xxx ã®çŸåšã®ææè
ã¯ãç§å¯éµ yyy ãæã£ããŠãŒã¶ãŒã§ããããšãã£ãæ¹æ³ã§æææš©ã管çããŠããŸãããâââ ã® NFT ããããããšããã®ã¯ããâââ ãšããã¢ã€ãã ã®æææš©ããããããšããæå³ã«ãªããŸãã
ãããŠããã®æã«äœ¿çšããå ¬ééµã»ç§å¯éµããæå·è³ç£ã«äœ¿ããããŠã©ã¬ããã®éµã䜿ãããšã§ãæå·é貚ã«ãã売買ååŒãšæææš©ã®ç§»è¡ãåæã«è¡ãããšãã§ããŸãã倧åã®å Žåã® NFT ã¯ãã®ã¿ã€ãã§ãã
ããã§æ³šæãã¹ãã¯ãæææš©ãã§ãããèäœæš©ã§ã¯ãªããããšã§ãã
äŸãã°ãããžã¿ã«é³æ¥œãè³Œå ¥ãããšããã®ã¯ãåçããæš©å©ããè³Œå ¥ããŠææããŠããã®ã§ãããèäœæš©ãè€è£œæš©ãè³Œå ¥ããŠããã®ã¯ãªããã®ãšåãã§ãïŒè©³ããã¯åŸè¿°ããŸãïŒã
ãã®ããã«ãããšããå€ãçŸåšèª°ã®ãŠã©ã¬ããã«çŽã¥ããŠããããããããã¯ãã§ãŒã³ã§ç®¡çããããšã§ããã®å€ã®æææš©ã確èªããããšãã§ããã®ã NFT ã§ãããŸããæææš©ãšãã£ãŠããåºæ¬çã«ãã®æš©å©ã¯ããã® NFT ã®ãµãŒãã¹å ã«éå®ãããŸãã
ããããäœåã®äœæ¥ã»å¶äœèšé²ãã¢ãŒã«ã€ãããŠããããã®ããã·ã¥å€ãã¢ã€ãã ID ãšã㊠NFT ã«ç»é²ããŠããã°ãèäœæš©äŸµå®³ã§èšŽããããéã«ã嵿工倫ããŠäœæãããã®ã§ããããšãã蚌æ ã® 1 ã€ã«ãªããŸãããã¡ãããNFT ã§ãªãçŽæ¥ãããã¯ãã§ãŒã³ã«ããã·ã¥å€ãå»ãã§ãæ§ããŸããã
ãããã¯ãã§ãŒã³ã®ä»çµã¿äžãç»é²æéã¯æ¹ããã§ããªããç§å¯éµã倱ããããçãŸãããããªãéãèªåãç»é²ãããã®ã§ãããšæè¡çã«èšŒæã§ããŸãã
éã«èšãã°ãéå ¬éãããã¯ãã§ãŒã³ãå©çšããïŒæ å ±å±¥æŽãçŽæ¥èŠããªãïŒ NFT ã§ã¯æå³ããªããšããããšã§ããããŸãã
å è¿°ããããã«ãããã¯ãã§ãŒã³ãšã¯ããã³ã¹ããïŒèšç®éãæéã黿°ä»£ãèšæ¶å®¹éïŒãšåŒãæãã«ã忣ããšãã€ã³ã»ã³ãã£ããïŒãã€ãã³ã°ïŒã«ããã誰ãä¿¡çšã§ããªãç°å¢ã«ãããæ å ±ã®å ç¢æ§ãå®çŸããŠããŸãã
éå ¬éãšããããšã¯ãªã³ãã¬ãã¹ã§ãããã©ã€ãšã¿ãªãšããããšã§ããããæ¹ããã«å¯Ÿãã客芳çãªç¢ºä¿¡ãæãŠãããã€åç£ãããæ¶ãããããã¯ãã§ãŒã³ãšããããšã§ãã
ãããããéå ¬éãªãå¥ã«ãããã¯ãã§ãŒã³ã䜿ãããšãããã£ãšã³ã¹ããäœããåŠçãéãåãããšãã§ããŸãããæ¯ããæè¡ïŒå ç¢ã§å®çžŸã®ããæè¡ïŒããããŸãã
é¢é£äŒç€Ÿãç³»åäŒç€Ÿéã®ééçãªãããã¯ãã§ãŒã³ãªãããç¥ããããããŠã³ã¹ãã®é«ããããã¯ãã§ãŒã³ãéå ¬éã§äžè¬ãŠãŒã¶ã«äœ¿ããããšããããšã¯ããããã©ã€ãšã¿ãªãããæè¡çã«äžå®ãªã©ãå«ããäœãããåŸããããããããã¯é ãããããšããããããããŠãŒã¶ã®ãåççç¡ç¥ããå©çšããéã®åãããããŸããã
ãA 瀟㮠NFT ãä»ç€Ÿã§ã䜿ããããå¥ã®ãµã€ãã§ãååŒã確èªã§ãããããèŠæ¥µãã®ãã€ã³ãã«ãªããããããŸããã
以äžã®ããã«ãNFT ã¯ãæå·é貚ã®ã³ã€ã³ã®ä»£ããã«ãã¢ã€ãã ID ã«çœ®ãæãããããã¯ãã§ãŒã³ããšãèšããŸãããéåžžã¯æå·é貚ã®ãããã¯ãã§ãŒã³ãšã¯ç°ãªããã®ã®ãã»ããã§ç®¡çããããããã¯ãã§ãŒã³ã§ãã
ãã®ããšãããNFT ã¯ãããã¯ãã§ãŒã³æè¡ã® 1 ã€ã®æŽ»çšæ³ãšãèšããŸãã
äŸãã°ãæ ç»é€šãåå Žã®ãã±ãããªã©ã§æŽ»çšããå ŽåãèŠãŠã¿ãŸãããã
ç¹°ãè¿ããŸãããããã§èšãããŠã©ã¬ããããšã¯ãç§å¯éµãæã£ãŠãã人ããšå矩ã§ãããŠã©ã¬ããéã®ç§»åãã¯ãã¢ã€ãã ã«çŽä»ããå ¬ééµã®å€æŽãããããã¯ãã§ãŒã³ã«èšé²ããããšå矩ã§ãã
- äžæ åã®ã¢ã€ãã IDïŒããã·ã¥å€ïŒã NFT ãšããŠçºè¡ããã
- äŒå Žã®åº§åžçªå·ãã¢ã€ãã ID ãšçŽã¥ããŠããã
- ãŠãŒã¶ãŒã座åžãè³Œå ¥ãããšãã¢ã€ãã ID ã®æææš©ãæ ç»é€šã®ãŠã©ã¬ãããããŠãŒã¶ãŒã®ãŠã©ã¬ããã«ç§»åããã
- å ¥å Žæã«ãã¢ã€ãã ID ããã®ãŠãŒã¶ãŒã®ãŠã©ã¬ããã«çŽã¥ããŠããã確èªããã
- çŽã¥ããŠããå Žåã¯ããŠãŒã¶ãŒã®ãŠã©ã¬ããããæ ç»é€šã®ãŠã©ã¬ããã«ç§»ããå ¥å Žã§ããã
ããã§ãããïŒ ã³ã³ãµãŒãã®é»åãã±ãããšåããããããšæ°ã¥ããæ¹ããããšæããŸãããããã¯ããããã¯ãã§ãŒã³ãããŒã»ããªã¥ãŒåã® DB ãšããŠäœ¿ã£ãŠãã ããããããšã
éããç§ã¯ãã»ããŒããšæå¿ããã ãã§ããã
èšãããŠã¿ããšã確ãã«åãã§ãã
åŸæ¥ã®é»åãã±ããããNFT ããè³Œå ¥æ¹æ³ã¯åãã§ããçŸéãäžæŠãã€ã³ããã¯ã¬ãžãããããã¯æå·éè²šã«æéãããããã察象ç©ãè³Œå ¥ïŒåãåŒãïŒããŸããåãåŒããæç«ããŠããäºãã«åºéã»å ¥éã確èªããããšã察象ç©ã¯çžæã®ã¢ã«ãŠã³ãã«ç§»ããããéµéãããŸãã
ãã¯ããäžçªã®éãã¯ããããã¯ãã§ãŒã³ãå©çšããŠããããšã§ãããã
ã€ãŸããåºéã»å ¥éãšåæã«ã¢ã€ãã ã® ID ãšãŠã©ã¬ããã®çŽä»ããå®äºãããããNFT ãã±ããã®æææš©ã®ç§»åãå°åž³ãšããŠå»ãŸããŠãããšããããšã§ãããã®ããããæ¯æã£ãã®ã«çºéãããªãããšãã£ããã©ãã«ããããŸããã
ã³ã³ãµãŒãã®é»åãã±ããã®å Žåã¯ãè³Œå ¥æã«é¡åçã身å蚌æãæ·»ä»ããŠãããå ¥å Žæã«ç §äŒããããšã§è»¢å£²å¯Ÿçãããå¿ èŠããããŸãããæå¹ã§ã¯ãããã®ã®ããã©ã€ãã·ãŒä¿è·ã¯é»åãã±ããã®çºè¡åŽãéå¬äŒå ŽåŽã®ãäŒç€Ÿãã¹ã¿ããã®ã»ãã¥ãªãã£ãŒæèã«äŸåããŸãã
ãããã¯ãã§ãŒã³ã®å ŽåããŠã©ã¬ããã®å ¬ééµïŒå³å¯ã«ã¯ç§å¯éµïŒã身å蚌ãšããŠæ©èœãããŠã©ã¬ããéã®ç§»åã確èªã§ããŸãããã®ãããäžã€ã®ãŠã©ã¬ããã倧éã«è³Œå ¥ããŠäžç¹å®å€æ°ã«è»¢å£²ããŠããããªã©ã远跡ã§ããããã転売å±ïŒã®ãŠã©ã¬ããïŒãç¹å®ããããšã容æã«ãªã£ãããç§»åå±¥æŽãèŠãã°è»¢å£²ãã±ããã§ããã確èªããããšãã§ããŸãã
ãã®ãããªä»çµã¿ããããã©ã€ãšã¿ãªã§èªç€ŸéçºããŠãããã®ã§ãããã€ãŒãµãªã¢ã ãªã©ã®ãªãŒãã³ãœãŒã¹ã§æ¢åã®ã·ã¹ãã ãäœ¿ãæ¹ãæ±çšæ§ã»ç¶ç¶æ§ã»ä¿¡çšæ§ãå¢ããŸããã€ãŒãµãªã¢ã ãªã©ã®ææ°ã®ãããã¯ãã§ãŒã³ã¯æå·é貚ã ãã§ãªããNFTïŒäžæã®ããã·ã¥å€ïŒã®çºè¡ãšç®¡çãã§ããä»çµã¿ãæã£ãŠããããã§ãã
ã€ãŒãµãªã¢ã ã®å Žåããã®ãããã·ã¥å€ã®çºè¡åŠçãã mintïŒé³é
NFT ã®ã¡ãªãã
ããžã¿ã«äœåã NFT åããã¡ãªããã§ããã倧ãã 2 ã€ãããŸãã
- ã¢ã€ãã ã«å¯Ÿãããæææš©ã®å£²è²·ãïŒã¢ã€ãã ID ã®ãŠã©ã¬ããéç§»åïŒãå¯èœã§ããã
- ã転売ãããŠãäœè ã«ããŒãžã³ãè¡ããä»çµã¿ãããã
ããã«ãããã³ããŒããŠè»¢å£²ããŠããæææš©ããæã£ãŠããªããã°ãããšãããŒã¿ã®å 容ããŸã£ããåãã§ãã£ãŠãã³ããŒãéæ³ã³ããŒãšæå®ã§ããŸãããŸãå 容ãããã£ãŠããã·ã¥å€ãå€ãã£ããšãããèŽäœãšæå®ã§ããŸãã
ããïŒã§ããã³ããŒããŠå£²ã£ã¡ããã°ïŒã³ããŒãäžè¬å ¬éããªãéãïŒåé¡ãªãã®ã§ã¯ïŒããšæãããšæããŸãã
CD ã¬ã³ã¿ã«ãäžå€æ¬ã§ããããã§ããããã«ãå人å©çšã§ããã°ã³ããŒãæã€ããšèªäœã¯éæ³ã§ã¯ãããŸãããåé¡ã¯ã転売æã«äœå®¶ããã«ããŒãžã³ãè¡ããªãããšã§ããããã§èšãããŒãžã³ã¯ã売ãäžãããäœè ãžè¡ãåãã¶ãã®ããšã§ãã
NFT ã¯ã¹ããŒãã»ã³ã³ãã©ã¯ãã®ã¹ã¯ãªããå 容ã«ããã転売æã®åãåŒãã§äœè ã«ãããŒãžã³ãæž¡ãããã«ã§ããŸãã
ãããããããã NFT ã®äžçªã®åŒ·ã¿ã ãšæããŸãã
NFT ã¯ã³ããŒã§ãã
NFT ããããžã¿ã«ã»ããŒã¿ãã³ããŒã§ããªãæè¡ããšèšã£ãŠããã¡ãã£ã¢ããããŸãããéããŸããã³ããŒã§ããŸãã
ãããã100% åãããžã¿ã«ã»ããŒã¿ãªã®ã«ãã©ã¡ããæ¬ç©ãã蚌æã§ããã€ã³ãã©ãã NFT ãªã®ã§ããæè¡ãšèšããã€ã³ãã©ãšåŒãã§ããã®ã¯ãå®è£
æ¹æ³ã¯åããªãããã§ããã€ãŒãµãªã¢ã å£äœãªã©ãããããå¶å®åããåãããããããããçµç¹èŠæš¡ããããã¡ã¯ãã»ã¹ã¿ã³ããŒãã«ãªããšã¯æããŸããããã€ãŒãµãªã¢ã ã® NFT = NFTãã§ã¯ãããŸããã
ãã¡ãã NFT ã®ãã¡ãªããããããŸãã
1 ã€ã¯ãé»å眲åãç¥ããªããšãããªããããšã§ããããã¯ãèäœæš©ãå®ãããã«äœå®¶èªèº«ãè¿ä»£çãªãµã€ã³ã®å ¥ãæ¹ïŒé»å眲åã®ä»æ¹ïŒãèŠããªããšãããªãã£ãããäœåã®è³Œå ¥è ã¯å ¬ééµã®åºã©ãããšã眲åã®ç¢ºèªã®ä»æ¹ãèŠããå¿ èŠããããšããããšã§ãã
ãªããªãã誰ã§ã NFT ã§ããŒã¿ãå
¬éã§ãããããåæã« NFT åãããããšãå€ã
ãããããäœè
èªèº«ããªãªãžãã«ã§ããããšã蚌æããåªåãå¿
èŠã«ãªããŸããäŸãã°ãäœå®¶ã®ããŒã ããŒãžãSNS ã®ãããã£ãŒã«ãåºç瀟ã®ç޹ä»ããŒãžãªã©ã«å
¬ééµãå
¬éããã»äœåã«ã¯å¿
ãé»å眲åãæ·»ãããªã©ã§ããããã«ãããäœåãé»å眲åãããŠããå ŽåããŠãŒã¶ãŒã¯äœå®¶ã®å
¬ééµã§æ€èšŒã§ããŸãã
2 ã€ç®ã®ãã¡ãªããã¯ãç§å¯éµãšããåäžé害ç¹ããããããšã§ãããã㯠NFT ãæå·è³ç£ã«éããè¿ä»£çãªã»ãã¥ãªãã£å šè¬ã«èšããããšãªã®ã§ãããã»ãã¥ãªãã£ã®å šãŠããç§å¯éµãã«äŸåããŠããŸããã€ãŸããç§å¯éµãçŽå€±ããŠããŸããšå ãåããªãäžçãªã®ã§ãã
ãã€ãã³ããŒã«ãŒãããã¹ããŒããšåãããããã¯ãã以äžã«ä¿ç®¡ã»çŽå€±ã»æµåºã»çé£ã«æ³šæããå¿ èŠããããŸãïŒãããã幎床ããšã«éµãäœãçŽãããããŠç§å¯éµãç Žæ£ããŠããŸãããââ幎床ã®äœåããšå²ãåã£ãŠããŸãã®ããããããããŸããïŒã
ããŠãã»ãšãã©åŸ©ç¿ãªã®ã§ãã NFT ã®ä»çµã¿ãçè§£ããã®ã«å¿
èŠãªãã€ã³ãã 4 ã€ãããŸãã
- ãã¡ã€ã«ã®ããã·ã¥å€
- å ¬ééµãšç§å¯éµã«ããæå·åã»åŸ©å·ãšçœ²å
- ãããã¯ãã§ãŒã³ã® DB ã«ããæææš©ã®ç§»åèšé²ïŒå€æŽãäžå¯èœãªååŒå°åž³ïŒ
- IPFS ã«ããå ¬ééµã眲åãã³ã³ãã³ããªã©ã®é åž
ãããã¯æ¬èšäºã§èª¬ææžã¿ã§ãããçè§£ããŠãããš NFT ã¯ä»¥äžã®ãããªãã®ã§ãããšèª¬æã§ããŸãã
- ããžã¿ã«äœåïŒããŒã¿ïŒã«ã·ãªã¢ã«çªå·ãåããŠããã·ã¥åããå€ããããŒã¯ã³ããšããã
- ããŒã¯ã³ãããã¯ã·ãªã¢ã«çªå·ä»ãããŒã¿ããèè ïŒäœå®¶ãããã¯èäœæš©é¢ä¿è ãªã©ïŒã®ãç§å¯éµãã§çœ²åããã
- ããŒã¯ã³ã®ææè ãšçœ²åãã¡ã€ã«ããããã¯ãã§ãŒã³ã§ç®¡çããã
- èè ã®ãå ¬ééµãã«ãã£ãŠçœ²åã確èªã§ããææè ã確èªã§ããã
ããŒã¯ã³ã«ã€ããŠã¯åŸè¿°ããŸãããããã«ãããããã«åºåã£ãŠããããžã¿ã«äœåã®ãå ¬åŒããªææè ã確èªã§ããŸãã
ã€ãŸããããŒã¿ã®ããã·ã¥å€ïŒããã§ã¯ããŒã¯ã³ïŒããã³èè ã®å ¬ééµã«ããæ€èšŒãéãã°ããã®ããŒã¿ã¯æ¹ç«ãããŠããªãïŒåœç©ã§ãªãïŒããšã確èªã§ããã®ã§ãã
ãããŠããã®ããã·ã¥å€ãå°çšã®ãããã¯ãã§ãŒã³ã® DB ã§ç¢ºèªããããšã§ããã®äœåã®ãå ¬èªã®ææè ãã§ããããšãä¿èšŒãããŸãã
æè³ã«ããã NFT ã¯ããã®æææš©ïŒããŒã¯ã³ïŒãçµµç»ã骚è£åãšåãä»çµã¿ã§å£²è²·ããŠããã®ã§ãã
ããããNFT ãšæå·è³ç£ãé©åã«çµã¿åãããããšã§ãåŸæ¥ã®çµµç»ã骚è£åã®å£²è²·ãšãã£ããã®ãšéãã¡ãªãããåºãŠããŸãã
ããããããã®çµã¿åããã®æå€§ã®ã¡ãªããã¯ããã®åŸãNFT äœåã転売ãããŠãäœå®¶ã«ããŒãžã³ãå
¥ããšããããšã§ããããïŒNFT ãµãŒãã¹ã«ãã£ãŠç°ãªããŸãããåŸè¿°ããã€ãŒãµãªã¢ã ã»ããŒã¹ã® NFT ã®å Žåã¯ä»çµã¿äžã§ããã¯ãã§ãïŒ
ããã¯ã倿¬ãªã©äžå€ååå£²ã§æ³£ããŠããäœå®¶ãããææžã§ããå¯èœæ§ãç§ããŠããŸãããã®ããšãèãããã NFT ãå§ããŠããæ¥è
ã»åºçãããããããäœå®¶ããã¯èŠæ³šæã§ããäžèŠãªããŒãžã³ãæãããŠãããšæããŸãã
æè¿ã§ã¯ããžã¿ã«äœåã«éãããç ç©¶ã«äœ¿ããããããªå人ããŒã¿ã®åãæ±ããªã©ã«ã NFT ã¯æ³šç®ã济ã³ãŠããŸãã
ãç¹æ®ãªäœè³ªãç çã®ããæ€æ»ããããŠæ¬²ããããšååŸããæ£è ã®ããŒã¿ããç é¢ãå¥ã®ç ç©¶æ©é¢ã«æåã§æäŸããŠããã±ãŒã¹ãªã©ã§ãããç ç©¶ã®ããããšããåç®ã§ãµã€ã³ããŠããã®ãšãåºæ¬çãªå人æ å ±ã¯åé€ãããŠããããæ£è ã®ç¥ãã¬éã«è¡ãããŸãã
ããã貎éãªããŒã¿ããæ å ±ãæäŸããæ£è ããã«ããã¡ããšéå ããã€ã€ãåºã掻çšã»ã¢ã¯ã»ã¹ãããããã«ãšãã£ãåãã§ãã
NFT ã®ææããŒã¿ã¯ãããã¯ãã§ãŒã³ã§å
±æã»ç®¡çãããŸããã察象ãšãªãæ¬äœã®ããŒã¿ã¯ãå¥ãªã®ã§æ°ãä»ããå¿
èŠããããŸãã
äžè¬çã«ãæ¬äœããŒã¿ã¯ IPFS äžã®ãããã¯ãŒã¯ãããµãŒããçšæããŠåŸæ¥ã®ããŒã¿æäŸæ¹æ³ã§è¡ãããŸããä»ã«ããäœåèªäœã«ãããã QR ã³ãŒãã®å
¥ã£ãç©ççãªåªäœã§æäŸããããããŒã¯ã³ãæã£ãŠãã人ã®ã¿ããŠã³ããŒãã§ãããµãŒãã§æäŸããããããŸããããããµãŒãã¹äŒç€Ÿã«ãã£ãŠéããŸããã€ãŸããNFT ã§ãã£ãŠããäŒç€Ÿã朰ããã°ã¢ã¯ã»ã¹ã§ããªããªãå¯èœæ§ãããã®ã§ãã
ãã€ã³ã¿ãŒãããããããããã¯ãã§ãŒã³ãåæ§ãNFT ãšããååãç¹å®ãµãŒãã¹ãäŒç€Ÿãæãããã§ã¯ãããŸãããã€ã³ãã©ã®ä»çµã¿ã® 1 ã€ã§ãããNFT ãæäŸããŠããäŒç€Ÿã 1 ã€æ¶ããããšããã®ã¯ããããã€ãã 1 ã€æ¶ããããšããªããéãã¯ãããŸããã
æããã«èšããšãNFT ã¯èè
ãããžã¿ã«äœåã«ãèšŒææžããæ·»ããããšã§ãäœè
ã®å
¬ééµã«ãããé宿žãïŒãããã¯ãä¿èšŒæžãïŒã®åœ¹å²ãæãããçŸåšã®ææè
ããããã¯ãã§ãŒã³ã§ç¢ºèªã§ãããä»çµã¿ãã§ãã
NFT ã®åŒ·ã¿ã¯ãææè
ã確èªã§ããä»çµã¿ãã§ããäœåºŠãèšåããŠããããã«ãã³ããŒãããŠãå
容ã 100% åãããŒã¿ãåžå Žã«åºåã£ããšããŠããèŽäœããšèªå®ã§ããä»çµã¿ãªã®ã§ããåãäœåã§ããã·ã¥å€ãéãã°ããããããèŽäœãã§ããããããã¯ãã§ãŒã³ã® DB äžã®ææè
ãéãã°ãçåãã§ãã
æ¬¡ã«æ¬è³ªçã«éèŠãªã®ããèè
ãå
¬åŒãªå Žã«ãããŠå
¬ééµãå
¬éããŠããããšããšãäœåããŒã¿ã®çœ²åãå
¬éããŠããããšãã倧åæã§ããããšã§ããNFT ãšèšãã©ã察象ããŒã¿ã¯èäœç©ã§ãããã®ãããå¿
èŠã§ããã°éæ³ã³ããŒã«å¯Ÿãã鮿ã«ã€ãªããæ
å ±ã«ã䜿ããŸãã
ãã®ãã NFT ã®æ¬æ¥ã®ç®çã¯ä»¥äžã® 2 ç¹ãšèšããŸãã
- ããžã¿ã«äœåãææããããšã«äŸ¡å€ãèŠãåºãã³ã¬ã¯ã¿ãŒãä¿è·ããããã®ãã®ã
- ããžã¿ã«ã»ã¢ãŒãã£ã¹ãã®äœåã«å¯Ÿãããªã¹ãã¯ãã瀺ããã®ã
ããããçŸåšã¯ãæ¥æ¬ã§ã®ã©ãã»ã³ã«ä»£è¡šããããçµµç»åæ³ã®ããã«äœ¿ããããšãããã«ç®ãä»ããäŒæ¥ããåŸç倧äºã«äœ¿ããããªããã¥ãšã«ã«ãŒãã«å€§éãåºããããªäººã ãã¿ãŒã²ãããã«åå ¥ããŠããã®ã§æ³šæãå¿ èŠã§ãã
ãã©ãã®ã§ãããæ¬æ¥ã®ç®çã¯ãããžã¿ã«äœåã«å¯Ÿãããã¡ã³ã®ãªã¹ãã¯ããã§ããããšã念é ã«çœ®ããŠãã ããã
NFT ã®æå³
NFT ãšã¯ Non Fungible Token ã®ç¥ã§ãç䟡亀æã§ããªãé¡ãã®ããŒã¯ã³ããšããæå³ã§ãã
å··
ãããŒã¯ã³ãšã¯äœããã®åã«ãããã§ãããç䟡亀æã§ããªããïŒNon FungibleïŒã®ãç䟡亀æãïŒFungibleïŒã«ã€ããŠå
ã«èª¬æããŸãããããŒã¯ã³ãã®èª¬æã¯ããã®ããšè¡ããŸãã
ãŸãããç䟡亀æãïŒFungibleïŒãšã¯ãéãéãªã©ã®ããã«ã圢ãéã£ããå€ãã£ãŠãåã質éã§ããã°åã䟡å€ãæã€ãã亀æã§ããããšããããšã§ãã
ã€ãŸãã100g ã®éã®å¡ãš 100g ã®éã®æèŒªã¯åãéã®å€æ®µãä»ããããïŒäŸ¡å€ãããïŒãšããããšã§ããã®å Žåã« Fungible ãšèšããŸãã
åæ§ã«ã10 æã® 100 åçãš 1,000 åçŽå¹£ã¯äº€æå¯èœãªã®ã§ Fungible ã€ãŸããç䟡亀æå¯èœããšèšããŸãããŸããçºæ¿ã¬ãŒãã«åãããŠãã«ãšåã®äº€æãããã«ãšãããã³ã€ã³ã®äº€æã¯ã§ããã®ã§ Fungible ãšãªããŸãã
å
ã
ã¯ã©ãã³èªã® fungiïŒãã®ãã®ã楜ããã䟡å€ãèŠãåºãïŒããæ¥ãŠãããã圢ãå€ãã£ãŠã楜ãããã䟡å€ãããããã®ã®æã«ãªããŸãããïŒã¡ãªã¿ã«ãçèã® fungus ãšã¯èªæºãéããå¥ã®ãã®ã§ããçèã® fungus ã¯ã¹ãã³ãžãšåãèªæºã® spongos ããæ¥ãŠããŸãïŒ
éã«èšãã°ãè£
食ãé 圢ãšãã£ãã圢ãã«äŸ¡å€ãããå Žåãªã©ã¯ãNon Fungible ãšããããšã«ãªããŸãã
äŸãã° 100g ã®ãã©ã¹ããã¯ãšæåã¢ãã©ãŒãçµã¿ç«ãŠã 100g ã®ã¬ã³ãã©ã¯ãç䟡亀æã§ããªããïŒNon FungibleïŒãã®ãšèšãããšã«ãªããŸããçµµç»ãªã©ããåã質éã®çµµå
·ãšçŽãšã¯ãç䟡ãã§ã¯ãããŸãããã¢ã€ãã«ãä»ããŠããã«ãã¥ãŒã·ã£ãšãç§ã®ã«ãã¥ãŒã·ã£ãåãã§ãã£ãŠãããã®ã¢ã€ãã«ã®ãã¡ã³ããèŠãã°ãç䟡ãã§ã¯ãããŸããã
åæ§ã«ã16 æ¡ã®ããã·ã¥å€ãšããããäžŠã¹æ¿ããå€ã¯ãç䟡ã§ã¯ãªããïŒäŸ¡å€ãéãïŒã®ã§ Non Fungible ãšãªããŸããéã« 16 鲿°ã®ããã·ã¥å€ãšåãå€ã® 10 鲿°ã®ããã·ã¥å€ã¯ãç䟡ãïŒäŸ¡å€ãåãïŒãªã®ã§ Fungible ãšãªããŸãã
身è¿ãªäŸã§èšããšã1,000 åæã®éãçªå·ãç°ãªã£ãŠãåã 1,000 åã®äŸ¡å€ãæã€ã®ã Fungible ã§ããããããéãçªå·ã 0000001 ãªã©ãçªå·ã«äŸ¡å€ãæããå Žå㯠Non Fungible ãšãªã 1,000 åïŒç䟡ïŒã§ã¯ãªããªãã®ã§ãã
ãã®ããã«ãNon Fungible Token ã¯ããç䟡亀æã§ããªããã®ãã®ããã®ããŒã¯ã³ããšããæå³ã«ãªããŸãã
転ããŠãå¯äžç¡äºã瀺ãããã®ããŒã¯ã³ããšãªãã誀解ãæããããªããéä»£æ¿æ§ããŒã¯ã³ããšã«ãã³ä»ããæ¥æ¬èªåãä»ããŠããã®ã§ãã
ã¡ãªã¿ã«ã話é¡ã®ã€ãŒãµãªã¢ã ã¯ãã³ã€ã³ãªã©ã® Fungible ããŒã¯ã³ãšãäžææ§ãæã£ã Non Fungible ããŒã¯ã³ãçºè¡ããããšãã§ããŸããã©ã¡ããããã·ã¥å€ã§ãDB ãé
åã®ããŒã®ããã«äœ¿ãããã®ã§ãããåè
ã¯ãïŒ1 ã³ã€ã³ã®ïŒããã·ã¥å€ã亀æããŠã䟡å€ãå€ãããªãã¿ã€ãããåŸè
ã¯ãïŒ1 NFT ã®ïŒããã·ã¥å€ã亀æããã䟡å€ãå€ããã¿ã€ãããšèãããšçè§£ãã¹ã ãŒãºã§ãããã
ã§ã¯ãèå¿ã®ãããŒã¯ã³ããšã¯äœã§ãããã
ããŒã¯ã³ã®æå³
ãããŒã¯ã³ãã§ããããããäžèšã§èª¬æãããšãåã䟡å€èгãæã€ãã®å士ã§ã®ã¿
ãã®ãäœããã¯äœã§ãããã®ã§ããäŸãã°ãã²ãŒã ã®ã³ã€ã³ãéåå°ã®å ¥å Žãã±ãããéè¡ã®ã¯ã³ã¿ã€ã ã»ãã¹ã¯ãŒããããã·ã¥å€ããªã©ã§ãã
ãããŠãåã䟡å€èгãæã€ãã®å士ã§ã®ã¿
æã ã®æ¥çã§èšãã°ãã¢ã¯ã»ã¹ã»ããŒã¯ã³ã¯åããµãŒãã¹ã§ã¯äŸ¡å€ããããç°ãªãç°å¢ã§ã¯ã ãã®ã©ã³ãã ãªæ°å€ã§ãããªãã®ãšåãã§ãã
ã·ãªã¢ã«çªå·ã«ãã䟡å€å
NFT ã®è©³ããä»çµã¿ã®è©±ãã®åã«ãã·ãªã¢ã«çªå·ãšäŸ¡å€ã«ã€ããŠãå°ã説æããŸãã
ãã¬ãŒãã£ã³ã°ã»ã«ãŒãã²ãŒã ãªã©ã§ã¯ãåæ°éå®ã®ã«ãŒããçºè¡ããããããããšããããŸããã1/100ãïŒ100 æäž 1 æç®ïŒãšãã£ãã·ãªã¢ã«çªå·ãæ¯ãããŠããã¢ã¬ã§ããã¢ãŒãã®äžçã§ã¯ã·ã«ã¯ã¹ã¯ãªãŒã³äœåãçç»ã®äœåãªã©ã§ãèŠãããŸãã
ããã¯ãè€è£œå¯èœãªäœåã«ã·ãªã¢ã«çªå·ãä»ããããšã§ä»å 䟡å€ãä»ããŠãããã®ã§ãã
ããŠããè€è£œå¯èœãªäœåãã®ä»£è¡šæ Œãšèšãã°ããžã¿ã«äœåã§ãã
ããŒã¿ã®ã³ããŒãªããŠèª°ã§ãã§ããŠããŸããŸãããã³ããŒã¬ãŒããšã㊠DRM ãªã©ãæåã§ãããã¬ãŒããå€ããŠããŸãã°åãããšã§ãã
ãã®ããšïŒDRM è§£é€ïŒã¯ãããããéæ³ã§ãããäœããããžã¿ã«äœåãäœãäœå®¶ããã®åå ¥ãæžããããšã«ããªããããŸãããããããããžã¿ã«ã§ããããšãããã©ãããªãªãžãã«ãªã®ãã倿ãé£ãããªããŸãã
äŸãã°ãèªåã®å¥œããªäœå®¶ããã亡ããªããæªçºè¡šã®æãäžããããžã¿ã«ã»ã€ã©ã¹ãããããã«å ¬éããããã®äœåã«ãšãŠãæéãåãããšããŸãããããããããã«å ¬éãããŠãã以äžã誰ã§ãããŒã«ã«ã«ä¿åã§ããŠããŸããŸãã
ã§ã¯ãããžã¿ã«äœåããäœåããšããŠååšãããã«ã¯ã©ãããã°è¯ãã®ã§ãããã
NFT ã¯ããã® 1 ã€ã®å¯èœæ§ã瀺ããã®ãšèšããŸãã
äŸãã°ãããžã¿ã«äœåã»äœè ã«ãã眲åãã¡ã€ã«ã»å ¬ééµãªã©ãã»ããã«ãããã®ãããããã¡ã¢ãªã«çŒããã䜿çšããŠãããã³å ãããé«ªã®æ¯ããªã©ããªãã§ãããã®ã§ä»å 䟡å€ãä»ããŠç©ççã« n åãã»ãããšããŠäœæããŸããã¬ã€ã€ãŒããŒã¿ãªã©ãä»ããŠãããæé«ã®ä»å 䟡å€ã ãšæããŸãã
ãããŠãåã ã®ã»ããã®äœåã«ã¯ã·ãªã¢ã«çªå·ãæãããŠããããã®ããŒã¿ã®ããã·ã¥å€ãäœè ã®ç§å¯éµã§çœ²åãããã®ããããã¯ããŒã¿ãšç§å¯éµãã»ããã§ããã·ã¥åãããã®ãããŒã¯ã³ãšããŠç¢ºèªã§ããããã«ãããªã©ã§ãã
NFT ã®ãµãŒãã¹ã«ãã£ãŠã¯ã»ããããã¯ã³ã¿ã€ã ã»ãã¹ã¯ãŒãã確èªã§ããããã«ããŠããããã䜿ã£ãŠãµãŒãã«ã¢ã¯ã»ã¹ãããšäœåãé²èЧã§ããããã«ãªã£ãŠããããç©ççãªã»ããã§ã¯ãªãåçŽã«ãªã³ã©ã€ã³ã§ããŒã¿ãããŠã³ããŒãããã¿ã€ãããã£ãããšãããã蟺ã¯ãµãŒãã¹ã«ãã£ãŠç°ãªããŸãã
ããŒã¿ã®ã·ãªã¢ã«çªå·ãããã·ã¥å€ãšææè ã®è¿œè·¡ãã§ããã°ãç©çã»ãªã³ã©ã€ã³ãæ¹æ³è«ã¯äœã§ãããã®ã§ãã
ãããŠãåã»ãããäœåãšããŠãªãŒã¯ã·ã§ã³ã«ãããã®ã§ãããã¡ãã 1 ç¹ãããã§å£²ã£ãŠãæ§ããŸããã
èœæã»è³Œå ¥ãã人ã¯ããã®ã»ããã®ææè ãšãªãããŒã¯ã³ãšçŽä»ããããããã¯ã»ãã§ãŒã³ã® DB ã«ä¿åã»å ±æãããŸãã
ãããã§å£²ããããã¯é¢ä¿ãªãããããŸã§ããããŒã¯ã³ã®ææè ã誰ã§ããããã確èªã§ããããã«ãªã£ãŠããã®ã§ãã
æ¯æãã¯çŸéã§ãä»®æ³é貚ã§ãæ§ããªãã®ã§ããããæ¯æããããããã¯ãã§ãŒã³ãžã®èšé²ããNFT æ
å ±ãèšé²ã§ãããã転売ãããæã«ããŒãžã³ãäœå®¶ã«éãèšå®ãã§ããããªã©ã 1 ã€ã§ã§ããããšãã Ethereum ãå€ã䜿ãããŸãã
æš©å©ã®è¿œè·¡ãšããŠã® NFT
NFT ã®ä»çµã¿ãç¥ããªããŠããç¥ã£ãŠãããªããšãããªãéèŠãªããšããããŸãã
ãã㯠NFT ã¯èäœæš©ïŒè€è£œæš©ãèäœé£æ¥æš©ïŒã®è²æž¡ã§ã¯ãªãããšã§ããã€ãŸãããããŸã§ããããŒã¯ã³ã®ææã瀺ãããã®ã§ããããšèšãããšã§ãã
ãšã¯èšããè€è£œæš©ãèäœé£æ¥æš©ãšãã£ãæš©å©ããäœåã®ããŒã¯ã³ããçå±äžã¯ NFT ã§ç®¡çã§ããã®ã§ãè¿ãå°æ¥ã«å¥çŽå±¥æŽå°çšã®ãããã¯ãã§ãŒã³ã«é²åãããããããŸããã
ããããéèŠãªããšãªã®ã§ç¹°ãè¿ããŸãããããéãæã£ããã ããããã® NFT äœåã®ã°ããºãäœã£ããããžãã¹ããŠãè¯ãããšèšãèãã¯ãCD ãè²·ã£ããã俺ã®ãã®ãã ããã³ããŒããŠå£²ã£ãŠãè¯ãããã°ããã®ããã°ãè²·ã£ãããç§ã®ãã®ãã ããåãæã®ã«ãã³ãèªåã§äœã£ãŠå£²ã£ãŠãè¯ãããšèšãèããšåãã§ãæãã£ããéæ³ã§ãã
ãŸããäœè
éå
¬èªã§åæã« NFT ãšããŠåºãæ¥è
ãåºãŠããã§ãããã
è³Œå ¥ããåŽã¯äœè å ¬èªãªã®ãã確èªããå¿ èŠããããŸãããããžã¿ã«ã»ã¢ãŒãäœå®¶ããããç¥ããªããã©ç§æžãåæã«ãããŸãããçãªçµæã«ãªããªãããã«å匷ãå¿ èŠã§ããå ¬éã»ç§å¯éµã«ããããŒã¿ã®çœ²åã®ä»æ¹ãããã¯ç¥ã£ãŠãããæ¹ãããã®ã§ã¯ãªãã§ããããã
NFT ã話é¡ã«ãªã£ãã®ã¯ Beeple ã Beeple-Crap åçŸ©ã§æå㪠Mike Winkelmann æ°ã NFT äœå矀ããªãŒã¯ã·ã§ã³ã«åºãããšãããç·é¡ 75 ååã§èœæãããããšããã§ãã
ãããããããã³ã€ã³ãªã©ã®æå·é貚ïŒä»®æ³é貚ïŒã®æè³å®¶ã®ãNFT ã¯æ¬¡ã®ããžãã¹ã«ãªãããšæè³å¯Ÿè±¡ãšããŠã話é¡ã«ãªã£ãŠããããä¿ºæ§æå·é貚ã®çºè¡ã«èºèº
ãã®ããããã㟠NFT ãç±ãããšè³Œå
¥ãèŠããããããå°æ¥ãé«ã倿®µãä»ããããèªå·±æè³ãšã㊠1 æã¯æã£ãŠããã¹ãããšã©ãã»ã³ã®çµµã®è³Œå
¥ãèŠãããããããªãã®ããšèããŠè¯ããšæããŸãã
éé¡ã ããã¡ãã£ã¢ã«åãæ²æ±°ãããã®ã§ãããBeeple æ°ã¯ 2007 幎ãã "Everydays" ãšèšãäœåã·ãªãŒãºã§ãæ¯æ¥ãæ¬ ããã 1 äœåããããã«äžããããšã 14 幎以äžç¶ããŠæ¥ãã®ã§ãããæ¯ã蟌ããªãè©æ¬ºããç¹°ãè¿ããŠããæ°ã«å¯Ÿãããã¡ã³ã®æ°æã¡ã倿®µã«åæ ãããã®ãªã®ã§ãã
- Beeple Crap å ¬åŒãµã€ã @ beeple-crap.com
ã€ãŸã NFT ã§äœåãåºãããã売ãããšãããã®ã§ããªãã®ã§ãã
ãããããã㯠DLsite ã ãšãã®ããªã§äœåãåºããŠãåãããšã§ãã
éã«èšãã°ããã¡ã³ãä»ããå Žåã¯ããããã¡ã³å¿NFT ã§ã¯æäŸå¯èœã§ãããšããããšã§ããããŸãã
äœåºŠãèšåããŠããŸãããã€ãŒãµãªã¢ã ãªã©ã䜿ã£ãã¿ã€ãã® NFT ã§ã¯è»¢å£²ããããšäœå®¶ã«ããŒãžã³ãå
¥ããã®ããããŸããã€ãŸããããŸã®ããã«ããžã¿ã«æŒ«ç»ãåç»ããªã³ã©ã€ã³ã§è³Œå
¥ããŠããããã NFT ã§ããã°äžå€ãšããŠè»¢å£²ã§ãããã転売ãããŠãäœå®¶ã«ããŒãžã³ãå
¥ãäžã®äžã«ãªãå¯èœæ§ãããããšããããšã§ãã
ïŒãã¬ãã§ãžããªäœåã宿ã€ãã³ãã®ããã«æµããŸãããæŸéããããã³ã«ãžããªã»ã¹ã¿ãžãªãå®®åŽé§¿å çã«ãããå ¥ãã®ã調ã¹ãŠã¿ãŠãã ããããŸãããªããšãå±ãããã¯ã»ãªããšãã§å£²ãããŠããäžå€æ¬ãäžå€ DVD ã売ãããã³ã«ãäœå®¶ã«ãããå ¥ããã調ã¹ãŠã¿ãŠãã ãããããã¯ãªãããšæããŸãïŒ
ãã®ãããããæ°ã«å
¥ãã®äœå®¶ããããã¡ã³ãšããŠæ¯æŽãã 1 ã€ã®åœ¢ããšããŠã¯ãNFT ã¯ããšãŠã䟡å€ã®ããä»çµã¿ã§ãããããžã¿ã«ã»ããŒã¿ã®ãªãªãžãã«ïŒåæ¬ïŒæ§ãæ
ä¿ããæ°ããä»çµã¿ã§ãããã®ã§ãã
ããã·ã¥é¢æ°ã®è¡çªïŒã³ãªãžã§ã³ïŒãšã»ãã¥ãªãã£
ãããªäŸ¿å©ãªããã·ã¥é¢æ°ã§ããããã¡ãã»ãŒãžãã€ãžã§ã¹ãã®ã³ãªãžã§ã³ãïŒç°ãªãå ¥åå€ãªã®ã«ããã·ã¥å€ãåããšãããè¡çªãïŒãæ©ã¿ã®ã¿ãã§ããã€ãŸãããæ¹ãããããŠããã®ã«ããã·ã¥å€ãå€ãããªããç¶æ ã§ãã
- MD5 ã¢ã«ãŽãªãºã ã®è¡çªäŸ
- SHA-1 ã¢ã«ãŽãªãºã ã®è¡çªäŸ
- ãå··ã§è©±é¡ã® Google ã® SHA-1 è¡çªãã£ãŠã¿ãã@ 73spica's Blog
ããããäžèšèšäºã®ããã«ç¹å®ã®ã¢ã«ãŽãªãºã ã§ããã·ã¥å€ãè¡çªããŠãã¢ã«ãŽãªãºã ãå€ãããšè¡çªããŸããã
ããã·ã¥å€ã®è¡çªãšåé¿
ã¢ã«ãŽãªãºã ãå€ãããšãè¡çªããªãããšèšããŸãããéããªãæ¬åœã«è¿ãåã§ãããæ¬åœã§ããããã§ã¯ä»¥äžã® md5 ãš sha1 ã®æ€èšŒãã芧ãã ããã
MD5 ã®è¡çªïŒæ€èšŒãšå®èšŒïŒ
<?php
// MD5 ã§è¡çªãããµã³ãã«ããŒã¿
$str1 = '4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518'
. 'afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2';
// â â
$str2 = '4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518'
. 'afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2';
// â â
// ãã€ããªã«å€æ
$bin1 = hex2bin(trim($str1));
$bin2 = hex2bin(trim($str2));
// è¡çªããã
$algo = 'md5';
$md5_a = hash($algo, $bin1);
$md5_b = hash($algo, $bin2);
echo ( $md5_a === $md5_b ) ? 'è¡çªããŸãã' : 'è¡çªããŠããŸãã', PHP_EOL;
// å¥ã®ã¢ã«ãŽãªãºã ã§ç¢ºèª
$algo = 'sha1';
$sha1_a = hash($algo, $bin1);
$sha1_b = hash($algo, $bin2);
echo ( $sha1_a === $sha1_b ) ? 'è¡çªããŸãã' : 'è¡çªããŠããŸãã', PHP_EOL;
/* åºåçµæ */
// è¡çªããŸãã
// è¡çªããŠããŸãã
- ãMD5 ããã·ã¥å€ãè¡çªããäŸ ïŒCollision Sample of an MD5 Hash valueïŒã@ KEINOS blog ãã
- ãªã³ã©ã€ã³ã§ã¿ã@ paiza.IO
SHA-1 ã®è¡çªïŒæ€èšŒãšå®èšŒïŒ
SHA1 ã®è¡çªã¯ããŒã¿ãµã€ãºã倧ããããã®ã§ paiza.IO ã§åäœãµã³ãã«ãäœããŸããã§ãããç°¡åãªã¹ã¯ãªãããšããŒã«ã«ã§å®è¡ããŠã¿ãçµæçµæãèŒããŸãã
<?php
$url_pdf1='https://shattered.io/static/shattered-1.pdf';
$url_pdf2='https://shattered.io/static/shattered-2.pdf';
$algo = 'sha1'; //è¡çªãã
echo hash($algo, file_get_contents($url_pdf1)), PHP_EOL;
echo hash($algo, file_get_contents($url_pdf2)), PHP_EOL;
$algo = 'md5'; //è¡çªããªã
echo hash($algo, file_get_contents($url_pdf1)), PHP_EOL;
echo hash($algo, file_get_contents($url_pdf2)), PHP_EOL;
exit
$ php -a
Interactive shell
php > $url_pdf1='https://shattered.io/static/shattered-1.pdf';
php > $url_pdf2='https://shattered.io/static/shattered-2.pdf';
php > $algo = 'sha1'; //è¡çªãã
php > echo hash($algo, file_get_contents($url_pdf1)), PHP_EOL;
38762cf7f55934b34d179ae6a4c80cadccbb7f0a
php > echo hash($algo, file_get_contents($url_pdf2)), PHP_EOL;
38762cf7f55934b34d179ae6a4c80cadccbb7f0a
php > $algo = 'md5'; //è¡çªããªã
php > echo hash($algo, file_get_contents($url_pdf1)), PHP_EOL;
ee4aa52b139d925f8d8884402b0a750c
php > echo hash($algo, file_get_contents($url_pdf2)), PHP_EOL;
5bd9d8cabc46041579a311230539b8d1
php > exit
md5 ãš sha-1 ã®ã»ãã¥ãªãã€ã«ã€ããŠ
å
æ¥ïŒ2018幎å€é ïŒããšããå±
é
å±ã®é£ã®åžã§ãmd5 ã¯ç Žãããããå®å
šã§ã¯ãªãããšããäŒè©±ãè³ã«ããŸããã詳ããã¯èããŠãŸããããããã¹ã¯ãŒãããã¬ã¡ãããçãªè©±ãã§ããã
ãããã調ã¹ãŠã¿ããå³å¯ã«ã¯ç Žãããããã§ã¯ãªãããã§ããããã確ãã«ç ŽãããŠã¯ãããã§ããã
ãšèšãã®ããããã·ã¥ã»ã¢ã«ãŽãªãºã ããç ŽããããïŒbreakïŒãšèšãããå ŽåãïŒã€ã®æå³ãããæ¥çã«ãã£ãŠããäœ¿ãæ¹ãéãã®ã§æ³šæãå¿
èŠããã§ãã
- ããã·ã¥åã®å ã®å€ãèšç®ã§åºããããã«ãªã£ã
- ã€ã³ãã¯ãïŒå€§ã身å ããã¬ãã
- ããã·ã¥å€ãè¡çªãããå¹ççãªæ¹æ³ãèŠã€ãã
- ã€ã³ãã¯ãïŒäžã身å ã¯ãã¬ãªããããªãããŸããããã
- ããã·ã¥å€ãè¡çªããç°ãªãïŒã€ã®å€ãèŠã€ãã
- ã€ã³ãã¯ãïŒå°ãåäœãçã£ããªãããŸãã«ã¯æå¹ã
ð  ã¡ãªã¿ã«ãäžèšã®ã身å ããã¬ãããšããªãããŸãããããã®éãã§ãããããã§ã¯ãïŒããã·ã¥å€ããã®éç®ã§ïŒãã¹ã¯ãŒãããã¬ãŠãã°ã€ã³ãããããšãïŒããã·ã¥å€ãè¡çªããïŒéããã¹ã¯ãŒãã§ãã°ã€ã³ãããããã¿ãããªéããæããŠããŸãã
äŸãã°ããããã·ã¥å€ãè¡çªãããã¹ã¯ãŒããèŠã€ããããšããŠããããã¯ïŒå°ãªããšãïŒïŒã€ã®ãµãŒãã¹å ã«ãããŠèµ·ããããšã§ãããã®åé¢ããããã·ã¥å€ãããã¹ã¯ãŒããéç®ã§ããããšãªããšãåããã¹ã¯ãŒãã®ä»ã®ãµãŒãã¹å šãŠã«ã¢ã¯ã»ã¹ã§ããããšã«ãªããŸããïŒãè¡çªãã«é¢ããŠã¯äžèšãããã·ã¥é¢æ°ã®åºæ¬ãšç¹åŸŽããåç §ããŠãã ãããïŒ
ãªããããã·ã¥å€ã®è¡çªãæ¢ãããšããæ»æãïŒattackïŒãšåŒãã ãããŸãããåè¿°ã®ãããã¯ã»ãã§ãŒã³ãªã©ã®ããã«ãããã·ã¥å€ã®è¡çªãæ¢ãããšèªäœã¯å šãŠæªæã®ãããã®ã§ã¯ãªãããšã念é ã«ãããŠãã ããã
ã©ããããmd5 ãç Žãããããšããã®ã¯ïŒçªç®ã®ãè¡çªããå€ã®å¹ççãªæ¢ãæ¹ããæããŠããããã§ããå
ã® md5 ã sha-1 ã®è¡çªã®æ€èšŒå®èšŒäŸãããã®ææ³ã䜿ã£ãŠçºèŠãããå€ã§ãã
çŸåšïŒ2020幎4æïŒã§ãããã¯ã md5ã sha-1 ããããã·ã¥å€ããåŒæ°ã®å€ã¯éç®ã§ããªããç¶æ
ã§ã¯ããïŒïŒçªç®ã®ç¶æ
ã¯ç ŽãããŠããªãïŒããã§ããããã...
å¢ãã MD5ãSHA-1 è±çè
ããããªãããæä»£ã¯ãè± MD5ããçµãŠãè± SHA-1ãã«åããŠããããã㊠SHA-2 å šçã®ããŸã¯ SHA-3 ã«å€ããããšããŠããŸãã
äŸãã°ãApple 瀟å
ã§ç§»æ€ã»éçºããŠãã OpenSSL ã®ãApple ç OpenSSLãã OpenSSL 098-76.200.2 ã§éçºãæ¢
åæã«ãSSL/TLS ã®æå·éä¿¡ã«äœ¿ãã©ã€ãã©ãªïŒããã·ã¥é¢æ°ãæå·é¢æ°ãæ ãã©ã€ãã©ãªïŒãã ããŒã¹ã ãApple ç OpenSSLããããLibreSSLãã« macOS High SierraïŒOSX 10.13ïŒããåãæ¿ããŸããã
For this reason, the programmatic interface to OpenSSL is deprecated in macOS and is not provided in iOS. Use of the Apple-provided OpenSSL libraries by apps is strongly discouraged.
ïŒOpenSSL | Transmitting Data Securely @ developer.apple.com ããïŒ
ãå©çšã® macOS ãã©ã¡ãã®ã©ã€ãã©ãªã䜿ã£ãŠãããã¯ãã¿ãŒããã«ãã $ openssl version ã³ãã³ãã§ç¢ºèªã§ããŸãã
ð  ãéçºãæ¢ããããšããã ãã§ãApple ç OpenSSL ã®æ§ããŒãžã§ã³ã
OpenSSL098-76.200.2ãïŒ2016 幎çïŒã¯ Mojave ïŒOSX 10.14.6ïŒ ã®å ¬éãœãŒã¹ã³ãŒãã«ã¯ãçŸåšã§ãååšããŠããŸãã
ãŸããæè¿ã§ã¯ SSH æ¥ç¶ããŒã«ã® OpenSSH ã v8.3 ãããSHA-1 ã䜿ã£ãå ¬ééµã®çœ²åã¯ãå°æ¥çã«ç¡å¹ã«ãªããæšã®è¡šç€ºãããã©ã«ãã«ãªããŸããã
The OpenSSH 8.3 release is out. This primarily a bug-fix release with a handful of minor new features. It does, however, carry a prominent notice that ssh-rsa signature algorithm will be disabled in "a near-future release".
ïŒOpenSSH 8.3 released (and ssh-rsa deprecation notice) | LWN.net ããïŒ
ð  å èšäºãçŽ äººåãã«ããããããæžããŠããªãããšããããŸãããããã€ãã®èšäºã§ SSH ã§ RSA å ¬ééµã䜿ããªããªããªããããªèšèŒããããŸãããéããŸãã
ssh-rsaãšããã®ã¯ãSSH éä¿¡ã«ãã㊠SHA-1 ã䜿ã£ãŠäœæããã RSA å ¬ééµã®ã眲åãã¡ã€ã«ãã®ããšã§ãSSH ã§ãã°ã€ã³ãããšæ¥ç¶å ãµãŒããŒã«ä¿ç®¡ããã眲åãã¡ã€ã«ã®ããšã§ããRSA æå·èªäœã®ããšãæãããã§ã¯ãããŸããã
ãªããã¿ããªãè± MD5ããè± SHA-1ããç®æããŠããã®ããšèšããšããšãã
å
ã® sha-1 ã®è¡çªå®èšŒã§ããããã®ããŒã¿ã¯ Google ãèŠã€ãããã®ã§ãããã®ææ³ã¯ãçºèŠãã 10 幎以äžåã«çºè¡šããããšãã
ããã ïŒã€ã®è¡çªã« 1,000 äžå以äžããããšããã®ã¯ãå人ãšããŠã¯å€§ããªéé¡ãããããŸãããããããå€§äŒæ¥ãåºåè²»ãååäœã§ãããã®ã¯ã¶ã©ã§ããããšãèãããšã決ããŠå€§ããéé¡ãšããããã§ããªãããšãããããŸãã
éã«èšãã°ããšãããµãŒããŒã®ããšãããŠãŒã¶ãŒã® SSH æ¥ç¶ãã¿ãŒã²ããã«ããå Žåã10 æ°äžãã«ãããã°ãããã³ã°ã§ããŠããŸãå¯èœæ§ããããšããããšã§ãããããŠãããã ãã®ã³ã¹ããããã䟡å€ã®ããæ å ±ãæã£ãäŒæ¥ãè¡æ¿æ©é¢ã¯çãããå¯èœæ§ãããããšããããšã§ããããŸãã
ãšããå¥³æ§æå·åŠè ã®è¡æè«æ
md5 ã¯ä»¥åãããªã¯ã³ã³ãšèšãããŠããã®ã§ããããã¡ãã³ãšèšããã倧ããªããã«ã±ãšãªã£ããããããããæ¢
ç å°é²ïŒWang XiaoyunïŒãããšããäžåœã®å±±æ±å€§åŠã®å¥³æ§æå·ç ç©¶è ã 2004 幎ã®äžæ¬ã«çºè¡šããè«æãšãå幎æ«ã«çºè¡šããè«æã§ãã
CRYPTO ãšåŒã°ããäžççãªæå·åŠäŒãããã®ã§ããããã® 2004幎ã®åŠäŒã§çºè¡šããã話é¡ãããããŸããã
- "Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD" by Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu | August 17, 2004 | PDF @ IACR.ORG
ãããã2004 幎㮠CRYPTO ç»å£è äžèЧãèŠãŠããçïŒã¯ã³ïŒããã®ååã®ç»å£èšé²ããããŸããã
- ç»å£è äžèЧ | CRYPTO 2004 @ IACR
ã©ãããéå¶åŽãããããªãããŒãªãããšè«æãåŽäžãããããç»å£ã§ããªãã£ãããã§ãã
ããããªãã°ããšæ¥éœ
- ã©ã³ãã»ãã·ã§ã³ã»ã¿ã€ã ã©ã€ã³ 7:35 "Collisions for hash functions MD4, MD5, HAVAL-128 and RIPEMD" | PDF | Crypto 2004 Rump Session Program @ IACR.ORG
ãããã圌女ã®è±èªããããã¥ããã®ãšè«æã®å 容ãé£ãããåšããããªãããããããšãèµ·ããŠãã£ãœãããšããç¶æ ã ã£ãããã§ãããšããããå幎æ«ããç¿å¹Žé ïŒ2004 - 2005 幎ïŒã«ãããŠãããªãè¡æçãªè«æãçºè¡šããŸãã
SHA-1 ã®è¡çªãèŠã€ããã¢ã«ãŽãªãºã ã®è«æã§ãã
- "Finding Collisions in the Full SHA-1" by Xiaoyun Wang, Yiqun Lisa Yin, Hongbo Yu @ IACR.ORG
ãããŠãã SHA-1 ã®è匱æ§ãææããŠããæå·ã»æ
å ±ã»ãã¥ãªãã£ã®å·šå ã§ãã·ã¥ãã€ã¢ãŒã®æ³åãã§ãç¥ããããã«ãŒã¹ã»ã·ã¥ãã€ã¢ãŒæ°ã 2005 幎 2 æã«ããã®è«æãèªããããšã§ãäžæ°ã«æ³šç®ã®ãŸãš
ãããŠãä»åºŠã¯ CRYPTO åŠäŒã®æ¹ãã圌女ãæåŸ ãã2005 幎㮠CRYPTO ã«ç»å£äŸé ŒããŸãããšãããããŸãããç»å£ã§ããªããšããããšãããããŸãããVISA ã®çºè¡æç¶ããé ããããã§ãã
ãã®ããšã¯ããã®è«æã®è§£æãé£ããæ€èšŒãé
ããŠããããã圌女ã®ç»å£ãå¿åŸ
ã¡ã«ããŠããæå·åŠè
ã ãã§ãªããã·ã¥ãã€ã¢ãŒæ°ãæ€æ
š
ãã®åŸãæéã¯ããã£ããã®ã®åçš®è«æãèªããããæå·åŠäŒã«ãããŠçïŒã¯ã³ïŒããã¯ç¡äºãèªç¥ãããããã§ããåœæã®æå·åŠè ãã¡ã¯ããã®åœŒå¥³ã®è«æãããºã«ãè§£ãããã§ã¯ã¯ã¯ã¯ããããã§ãã
ã§ãçµå±äžçªåŒ·ãã¢ã«ãŽãªãºã ã¯ã©ããªã®ãïŒ
çããã®è¡æè«æã®çºè¡šåŸãGOOGLE ã«ããæ»æïŒè¡çªïŒã®æ€èšŒå®èšŒãªã©ã«ãããMD5 ã SHA-1 ã ãã§ãªã SHA-2ïŒSHA-224ãSHA-512 ã®ç·ç§°ïŒã®èŠçŽããèšç»ãããŸããã
NISTïŒã¢ã¡ãªã«åœç«æšæºæè¡ç ç©¶æïŒã次äžä»£ SHA ãšãªã SHA-3 ã®ã·ãªãŒãºãäœãã¹ãå
¬åãããšãããåŸæ¥ã® SHA-1 ã SHA-2 ãšã¯æ ¹æ¬çã«ææ³ã®éããKeccakãïŒã±ã·ã£ãã¯, ã±ãã£ãã¯ïŒãšåŒã°ããã¢ã«ãŽãªãºã ãåªåã SHA-3 ã«æ¡çšãããããšã«ãªããŸããããããŠæ¡çšããïŒå¹Žã®æéãçµãŠ FIPS ãšåŒã°ããé£éŠæ
å ±åŠçæšæºã«å¶å®ãããŸããïŒFIPS PUB 202ïŒããªããSHA-3 ã«ã¯ SHA3-224ãSHA3-512 ã ãã§ãªããå¯å€é·ã§åºåããã SHAKE128 ãš SHAKE256 ãå«ãŸããŸãã
ãã®ããã2020/10 çŸåšãOS ãããã°ã©ã èšèªéã§äºææ§ã®é«ãããã·ã¥ã»ã¢ã«ãŽãªãºã ã§äžçªå ç¢ãªã®ã¯ãSHAïŒ-512ããšèšã£ãŠè¯ããšæããŸãã
SHA-3 ã®æ³šæç¹ãšããŠãªãªãŒã¹ææããããŸããå®ã¯ Keccak ãæ¡çšãããåŸãSHA-3 ãšã㊠FIPS ã«å¶å®ããããŸã§ã®éã«ä»æ§ã®å€æŽããããŸããããã®ãããKeccak ãš SHA-3 ã§ã¯åºåçµæãç°ãªããŸãã
ã€ãŸããããã·ã¥é¢æ°ã®ã©ã€ãã©ãªãå¶å®åŸã®æŽæ°ãããŠããã Keccak == SHA-3 ã®å€ã仿§ã®ãŸãŸã ãšãåã SHA3 ã§ãç°ãªã£ãã¢ã«ãŽãªãºã ã䜿ã£ãŠããã®ã§åºåçµæãç°ãªããšèšãããšã§ãã
ã©ã¡ãã®ã¢ã«ãŽãªãºã ãå©çšããŠãããã¯ãå®éã«ãããã·ã¥å€ã®äŸããå ã«èšç®ããŠç¢ºèªããã®ãæ©ããšæãããŸããSHA-3 ãå©çšããå Žåã¯ä»¥äžããã¹ãã«å«ããããã¢ããªã®åæåæã«ç¢ºèªããã®ãããã§ãããã
$ echo -n '' | openssl sha3-224
(stdin)= f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd
$ echo -n '' | openssl sha3-224
(stdin)= 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7
- åèæç®:
- Too Much Crypto @ IACR
- ãKeccak ãš SHA3 ã®é¢ä¿ã @ Qiita
- What is the most secure hashing algorithm? @ Quora
ãã«ãŒããã©ãŒã¹ããŸããã
ããŠãé話äŒé¡ã
ã€ãŸãããå¹ççã«è¡çªããæ¹æ³ã¯èŠã€ãã£ãããã®ã®ãmd5 ã sha-1 ã§ããã·ã¥åããããã¹ã¯ãŒããæµåºããŠãããªãªãžãã«ã®ãã¹ã¯ãŒããèšç®ã§åºããããã§ã¯ãªãããšããããšã§ãã
ãšããããããã¯ãã§ãŒã³ã®å°é ã«ããããã¯ã md5 ã sha-1 ã¯å±éºãšã¯èšããããã§ãã
ãšèšãã®ãããããã¯ãã§ãŒã³ã®ãã«ãŒãã»ãªãã»ã¯ãŒã¯ãä¿ã«èšããã€ãã³ã°ãšåŒã°ããäœæ¥ãããŸãã«ãããã·ã¥å€ã®è¡çªãæ¢ãäœæ¥ãã ããã§ããïŒãããã¯ãã§ãŒã³ã®æŠèŠã¯åé ã®ãããã·ã¥é¢æ°ãšãããã¯ã»ãã§ãŒã³ãåç §ïŒ
ãã€ãã³ã°ã¯ãåºæ¬çã«ç·åœããæ»æã®ææ³ã䜿ãããã§ãããå ã®è«æãå¿çšããã°ä»ããæ©ããã€ãã³ã°ãã§ããããšã«ãªããŸããäžåœã®ãã€ããŒïŒãã€ãã³ã°ãã人ïŒãå€ãã®ããããããè«æãäžåœèªã§èªãããããªã®ãããããŸããããã¶ãã
åãããã·ã¥å€ã®æ¹ããäœæ¥ã§ãããããã¯ãã§ãŒã³ã厩ãããã¯ãã€ãã³ã°ããæ¹ãçŽæ¥çã«ãéïŒæå·é貚ïŒãåŸããããããã®ã¶ããããã¯ãå ç¢ã«ãªã£ãŠãããšããè¯ããšããåããªã®ããä»®æ³é貚ïŒç¹ã«ãããã³ã€ã³ïŒãåºãŸã£ãçç±ãšãèšãããŸãã
éã«èšããšããã®è¡çªãããããŠããŠãã€ã³ãã©ã¯æªæãæã£ãŠæ¹ããããã®ã«ã䜿ããããšããããšã§ããããŸãã
ãããã€ãŒãµãªã¢ã å£äœãå®éšã§é²ããŠããæ¹è¯ç PoS ã«ãããã€ãã³ã°ãäžèŠã«ãªã£ãå Žåãäžçäžã§äœ¿ãããªããªã£ã GPU ãæº¢ããããšã«ãªããããŸãããã€ãŸããå°é皌ãã®çå
ãããã·ã¥å€ã®ã¯ã©ããã³ã°ã«åããŠããŸãå¯èœæ§ããããŸãã
ããããæå³ã§ãããã¯ãã¯ãªãã£ã«ã«ãªæ
å ±ã¯èšç®ã³ã¹ããé«ããšã¯ãã sha-256 ã sha-512ãå¯èœãªã sha3-512 ã䜿ã£ãæ¹ãä»ã¯å®å
šã§ãããšã¯èšãããã§ãã
ããã§ã md5 ã¯äœ¿ãããã軜éã§ãããããé »ç¹ã«äœ¿ãæšãŠããããããªãã®ã«ã¯äŸç¶æçšã§ãããã¯ããçµå±ã®ãšããæ©èœãç¹åŸŽããã¡ããšçè§£ããäžã§ãã³ã¹ããšçžè«ããéçšã®æ¹éã«ãããšæããŸãã
ð  SHA-1 ã®åŸç¶ã§ãã SHA-2 ã¯ãSHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256 ãªã©ã®ç·ç§°ã§ãããã©ãããã§ãããSHA-2 㯠20 幎åã«éçºãããã¢ã«ãŽãªãºã ã§ãã
ããã·ã¥å€ã®ãã¹ããªæäŸæ¹æ³
以äžã®ããšããããã»ãã¥ãªãã£ã®åŒ·åºŠãããåäžæ§ã®ç¢ºå®åºŠããé«ããã«ã¯ã以äžã®ïŒç¹ãåæã«æäŸããã®ã广çãšããããŸããã
- è€éãªèšç®ãå¿
èŠãªãé·ãããã·ã¥å€ãæäŸããïŒ
SHA256ãªã©ïŒ - ç°ãªãã¢ã«ãŽãªãºã ã®ããã·ã¥å€ãäžç·ã«æäŸããïŒ
SHA512ãšMD5ãªã©ïŒ - ããŒã¿ã®é·ãïŒãã¡ã€ã«ã»ãµã€ãºïŒãæäŸãã
OS ã®ã€ã¡ãŒãžã»ããŠã³ããŒãã§ SHA-1 ãš MD5 ãªã©ã®è€æ°ããã·ã¥å€ãæäŸããŠããã®ã¯ãSHA-1 ããã·ã¥ã䜿ããªã人ã®ããããªã®ããšæã£ãŠããŸããããã©ãããããã ãã§ã¯ãªãããã§ãããšããã®ããSHA-1 ãš MD5 ã®äž¡æ¹ãšãã£ãè€æ°ã®ã¢ã«ãŽãªãºã ã®ããã·ã¥çµæããåäžã®æ¹ãããã§è¡çªãããã®ã¯é£ããããã§ãã
æè¿ã¯ãSHA-1 ãš MD5 ã®å€ããã« sha-256 ã®ããã·ã¥å€ãš GPG ãªã©ã®çœ²åãåæã«æäŸããã®ãäž»æµãªã£ãŠæ¥ãŠããŸããããã¯ç°ãªãã¢ã«ãŽãªãºã ã®ããŒã¿ãæäŸããã®ãšåãèãæ¹ãããŒã¹ã«ãããŸããsha-256 ã®ãããå
ç¢ãªããã·ã¥å€ãšãããã·ã¥å€ãç§å¯éµã§æå·åãã眲åãæäŸããããšã§ãããã«é£ãããå¢ããŠããŸããsha-256 ã«ãããããŒã¿ãå£ããŠããªãããã®ç¢ºèªãšã眲åãçžæã®å
¬ééµã§æ€èšŒããããšã«ãã£ãŠåºã©ãããšäžèº«ãä¿èšŒãããšãåæã«è¡ããããã§ãã
ããŠãïŒçªç®ã®ãããŒã¿ã»ãµã€ãºãã§ããããŠã£ã«ã¹æ¬äœ ïŒ è¡çªçšããŒã¿ ããã㯠æ¹ããããŒã¿ ïŒ è¡çªçšããŒã¿ ãšèšã£ãããŒã¿ãåã蟌ãŸããå Žåã®å¯Ÿçã§ãããšèšãã®ãããªãªãžãã«ã®ããŒã¿ãšåãããã·ã¥å€ã«ããã€ã€æªæããããŒã¿ãåã蟌ãã§ããã€åããµã€ãºã«ããã«ã¯ããšãŠã倧å€ãªåŽåïŒã³ã¹ãïŒãå¿
èŠãšããããã§ãã
ã¢ã«ãŽãªãºã ã®çš®é¡ãšé·ã
ããŸã CSV ã®ããã«å°éŠ¬é¹¿ã«ããã MD5 ã§ãããSHA-1, SHA-256 ãªã©ã®ã¡ãžã£ãŒã©ãã以å€ã«ãã©ããªã¢ã«ãŽãªãºã ãããã®ãæ°ã«ãªããŸããã
ããã§ PHP ã® hash_algos() 颿° ã§ãµããŒãããŠããããã·ã¥ã»ã¢ã«ãŽãªãºã äžèЧãåºåãããšããããããªã«ããã·ã¥é¢æ°ïŒã®ã¢ã«ãŽãªãºã ïŒã£ãŠããã®ïŒïŒããšããã¯ãªã
ã¢ã«ãŽãªãºã äžèЧãèŠãŠããã£ãŠã MD2 ãªããŠãã£ããã ïŒããšç¥ã£ããšåæã«ãMD2 ã£ãŠ MD5 ãšåã 16 ãã€ãé·ïŒ128bit= 32 æ¡ã® HEX æååïŒãªãã ïŒããšæ°ä»ããŸããã
調ã¹ãŠã¿ããšè±èªçã® Wikipedia ã«ã¯ããã·ã¥é¢æ°ã®ã¢ã«ãŽãªãºã äžèЧãããããã®æ°ãããåã ã®ã¢ã«ãŽãªãºã ã®ä»çµã¿ãææ¡ããæ°åãã倱ããå¢ããïŒLGTM é ããã®ã§ç¿»èš³ãå§ãããã®ã®éäžã§ãããŠããŸããŸãããïŒ
- List of Hash Functions @ Wikipedia
ããã§ãåã ã®ã¢ã«ãŽãªãºã ã¯ã©ããããã®é·ãã®å€ãè¿ãã®ã調ã¹ãäžèЧã«ããŠã¿ãŸãããïŒã€ãã§ã«é床ãïŒ
MultibaseïŒããã·ã¥å€ã® n 鲿°å§çž®ãšèŠæ ŒïŒ
ããŠããããŸã§èªãã§ããã ããŠããïŒ16 鲿°ã®ãæ°å€ã®æåå
å®ã¯ç§ãæããŸããããa-zA-Z0-9 ã«èšå·ãè¶³ã㊠64 æåã ASCII ã®éçãªã挢åã䜿ãã°ãããããªããã©ãã UTF-8 ãªãã ãããšã
ãããŠãããµããã§æŒ¢å 8118 æåã䜿ã£ãŠ 8118 鲿°ïŒBase 8118ïŒã§è¡šçŸããŠã¿ããšãã MD5 㯠10 æ¡ãŸã§å§çž®ã§ããŸããã
$ php ./sample.php
Number of characters: 8118
Original String: This is a sample string to be hashed.
Pure MD5 hashed string: baad33e1e97f316b9750c27c86bf64d6
Multibyte base encoded: äå屩å·äŸåœšäää€å
ããããèèãæªžæª¬ã©ããã逿²¹ããæŒ¢åã§æžããã埮åŠãªç§ã«ã¯äœ¿ãç©ã«ãªããŸããã§ãããç¹ã« 8118 鲿°ã«äœ¿ã£ãæåãå ±éã§ã¯ãªãïŒé©åœã«éžãã ïŒããã§ãã
ãšããããåããããªããšãèãã人ã¯ãããã®ã§ãBase NïŒN 鲿°ïŒã§äœ¿ãããæåãå¶å®ãããããšããåãããããŸãããã§ã« Base64 ã«é¢ããŠã¯ã€ã³ã¿ãŒãããã®å¶å®å£äœã§ãã IETF ã RFC-4648 ã§å¶å®ãããã®ããããŸããããã®æŠå¿µãããã«æ¡åŒµãããã®ã§ãã
å ·äœçã«ã¯ãããã·ã¥å€ã®é ã«èå¥ã³ãŒããå ãããšãã仿§ã§ãããã®ã³ãŒãã«ãããã©ã®æåã䜿ã£ãŠãšã³ã³ãŒããããã®ãïŒäœé²æ°ã®ããã·ã¥ãªã®ãïŒããããã®ã§ããã³ãŒãã§ããïŒä»»æã®é²æ°ã®æ°å€ã«æ»ããïŒããã«ãªããŸãã
äŸãã°ã以äžã®ããã·ã¥å€ãèŠããããå Žåãã³ã¡ã³ãïŒ#ïŒããªããã°ãã³ãŒããã€ãŸãæååããæ°å€ã«æ»ããŠäœ¿ãããšãã§ããªããªããŸãã
4D756C74696261736520697320617765736F6D6521205C6F2F # base16 (hex)
JV2WY5DJMJQXGZJANFZSAYLXMVZW63LFEEQFY3ZP # base32
3IY8QKL64VUGCX009XWUHKF6GBBTS3TVRXFRA5R # base36
YAjKoNbau5KiqmHPmSxYCvn66dA1vLmwbt # base58
TXVsdGliYXNlIGlzIGF3ZXNvbWUhIFxvLw== # base64
ãã㯠"1234567" ãšããæååã®æ°å€ãæž¡ãããå Žåã«ããäœé²æ°ãããããªãããšèããã°ãã³ãšãããããããŸããã8 鲿°ä»¥äžã®å¯èœæ§ããã¹ãŠå«ãã§ããããã§ãã
ããã§é ã« 1 æåã®ãã¬ãã£ãã¯ã¹ïŒæ¥é èŸïŒãå ããŠããããèå¥åãšããŠäœ¿ããŸããïŒäžèšãšèŠæ¯ã¹ãŠã¿ãŠãã ããïŒ
F4D756C74696261736520697320617765736F6D6521205C6F2F # base16 F
BJV2WY5DJMJQXGZJANFZSAYLXMVZW63LFEEQFY3ZP # base32 B
K3IY8QKL64VUGCX009XWUHKF6GBBTS3TVRXFRA5R # base36 K
zYAjKoNbau5KiqmHPmSxYCvn66dA1vLmwbt # base58 z
MTXVsdGliYXNlIGlzIGF3ZXNvbWUhIFxvLw== # base64 M
æèŠãšã㊠16 鲿°ã®å Žå㯠0xã10 鲿°ã®å Žå㯠0dã2 鲿°ã®å Žå㯠0b ãšä»ããã®ãšäŒŒãŠããŸãã
ãã®ãããªä»æ§ããMultibase ãããã³ã«ããšåŒãã§ããŸãã2021/07/16 çŸåšãå¶å®ããã³æ€èšãããŠãããã®ã¯ä»¥äžã®éãã§ãã
encoding, code, description, status
identity, 0x00, 8-bit binary (encoder and decoder keeps data unmodified), default
base2, 0, binary (01010101), candidate
base8, 7, octal, draft
base10, 9, decimal, draft
base16, f, hexadecimal, default
base16upper, F, hexadecimal, default
base32hex, v, rfc4648 case-insensitive - no padding - highest char, candidate
base32hexupper, V, rfc4648 case-insensitive - no padding - highest char, candidate
base32hexpad, t, rfc4648 case-insensitive - with padding, candidate
base32hexpadupper, T, rfc4648 case-insensitive - with padding, candidate
base32, b, rfc4648 case-insensitive - no padding, default
base32upper, B, rfc4648 case-insensitive - no padding, default
base32pad, c, rfc4648 case-insensitive - with padding, candidate
base32padupper, C, rfc4648 case-insensitive - with padding, candidate
base32z, h, z-base-32 (used by Tahoe-LAFS), draft
base36, k, base36 [0-9a-z] case-insensitive - no padding, draft
base36upper, K, base36 [0-9a-z] case-insensitive - no padding, draft
base58btc, z, base58 bitcoin, default
base58flickr, Z, base58 flicker, candidate
base64, m, rfc4648 no padding, default
base64pad, M, rfc4648 with padding - MIME encoding, candidate
base64url, u, rfc4648 no padding, default
base64urlpad, U, rfc4648 with padding, default
proquint, p, PRO-QUINT https://arxiv.org/html/0901.4016, draft
- Multibase | Multiformats @ GitHub
ãïŒãïŒæ¯èŒã«äœ¿ããªãé¢ä¿ãªãããããããã 1 æåé·ããªã£ãŠããïŒããšæãããããããŸããã
ãã®èŠæ Œã®å©ç¹ã¯ã䜿çšããŠããããã·ã¥ã¢ã«ãŽãªãºã ã«è匱æ§ãçºèŠãããå ŽåãããŒãžã§ã³ã¢ããã®éã«äºææ§ã確ä¿ã§ããããšã§ããã€ãŸããé ã®æ°æåãèŠãã ãã§ããã¢ã«ãŽãªãºã ããããã·ã¥ã®é·ããããšã³ã³ãŒãã®çš®é¡ãããããããã«ãªãã®ã§ãã
ããå°ãå ·äœçã«è¡ããŸãããã
äŸãã°ã"multihash" ãšããæååã SHA2-256 ã®ã¢ã«ãŽãªãºã ã䜿ã£ãŠããã·ã¥åããå€ã®å Žå㯠16 鲿°ã§ä»¥äžã«ãªããŸãã
9cbc07c3f991725836a3aa2a581ca2029198aa420b9d99bc0e131d9f3e2cbe47
ãã®å Žåã16 鲿°ã§ããããšã瀺ãããã« f ãé ã«ã€ããŸããäžèšå¯Ÿå¿è¡šã«ç
§ããåããããš 16 鲿°ã®å°æåã®å Žå㯠f ã ããã§ãã
f9cbc07c3f991725836a3aa2a581ca2029198aa420b9d99bc0e131d9f3e2cbe47
ããããããã ãã§ã¯ã©ã®ã¢ã«ãŽãªãºã ã䜿ã£ãããã·ã¥å€ããããããŸããã
ããã§ãSHA2-256 ã®ã¢ã«ãŽãªãºã ã䜿ã£ãå Žå㯠A ãæåã«ä»ãããšããã«ä¿ºæ§ã«ãŒã«ãèšãããšããŸãããã®å Žåãæçµçã«ä»¥äžã®ããã«ãªããŸãã
Af9cbc07c3f991725836a3aa2a581ca2029198aa420b9d99bc0e131d9f3e2cbe47
ãïŒä¿ºæ§ã«ãŒã«ãŠããããªå®è£ ã§å€§äžå€«ãïŒïŒããšæã£ãããªãããã ããåããã§ãããããç¥ã¯èšã£ãŠãããã¢ã«ãŽãªãºã ã®çš®é¡ãå¶å®ããŠæ¬²ããããšã
ã¯ããåãå£äœããMultihashããšããèŠæ Œãå¶å®ããŠããŸãã
åºæ¬çã«ä»¥äžã®ãã㪠TLVïŒtype-length-valueïŒãšåŒã°ãããã©ãŒãããã«ãªã£ãŠããŸãã
-
<ããã·ã¥ã¢ã«ãŽãªãºã ã®çš®é¡><ããŒã¿ã®ãã€ãæ°><ããŒã¿ïŒããã·ã¥å€ïŒ>
-
8 ãããïŒ2ãã€ãïŒã®ç¬Šå·ãªãæŽæ°ã«ããã¢ã«ãŽãªãºã ã»ã³ãŒã
-
8 ãããïŒ2ãã€ãïŒã®ç¬Šå·ãªãæŽæ°ã«ããããŒã¿ã®ãã€ãæ° ïŒããã·ã¥å€ã®é n æ¡ã ãæž¡ãããå ŽåãããããïŒ
- ããŒã¿ïŒããã·ã¥å€ïŒ
-
8 ãããïŒ2ãã€ãïŒã®ç¬Šå·ãªãæŽæ°ã«ããããŒã¿ã®ãã€ãæ° ïŒããã·ã¥å€ã®é n æ¡ã ãæž¡ãããå ŽåãããããïŒ
-
8 ãããïŒ2ãã€ãïŒã®ç¬Šå·ãªãæŽæ°ã«ããã¢ã«ãŽãªãºã ã»ã³ãŒã
-
122041dd7b6443542e75701aa98a0c235951a28a0d851b11564d20022ab11d2589a8
-
SHA2-256
-
32 æåïŒ=
0x20ïŒ- ããã·ã¥ããŒã¿
41dd7b6443542e75701aa98a0c235951a28a0d851b11564d20022ab11d2589a8
- ããã·ã¥ããŒã¿
-
32 æåïŒ=
-
SHA2-256
å®ã¯ãå
è¿°ã®ãããã³ã€ã³ã®ããŒã¯ã³ã IPFS ã® CID ã¯ãããã·ã¥å€ã®ãã©ãŒãããã« Multibase ãš Multihash ã䜿ã£ãŠããŸãã
- Content addressing and CIDs @ docs.ipfs.io
é·ããç¥ã£ããšããã§äœïŒ
ã§ããããŒãå®ã¯ãç§ã¯ SQLite32 ã® INTEGER PRIMARY KEY ãã§ããªã®ã§ãã
ãã
ããã¯ãSQLite3 ã®å Žå㯠DB ãããŒæ€çŽ¢ããéã«ãDB ã® PRIMARY ããŒïŒäž»ããŒïŒã INTEGER åã«ãããšæãããã©ãŒãã³ã¹ãè¯ãããšããã®ãç²ä¿¡ããšãã®ã§ããïŒINT åã§ãªã INTEGER åã®å Žåã«éãïŒ
å
ã
SQLite3 ã§ã¯ rowid ã§æ€çŽ¢ããã®ãäžçªéããšãããŸããrowid ãšã¯ãSQLite ã§ã¯è¡çªå·ã®ããšã§ããDB ã«è¡ïŒã¬ã³ãŒãïŒãäœæããããš 64 bit/8 byteïŒHEX å€ã§ max 16æ¡ïŒã®è¡ ID ãèªåã§å²ãæ¯ãããŸãã
Searching for a record with a specific
rowid, or for all records withrowids within a specified range is around twice as fast as a similar search made by specifying any other PRIMARY KEY or indexed value.
ïŒROWIDs and the INTEGER PRIMARY KEY | SQL As Understood By SQLite @ SQLite.org ããïŒç¹å®ã®
rowidãæã€ã¬ã³ãŒãã®æ€çŽ¢ããæå®ããç¯å²å ã®rowidãæã€ãã¹ãŠã®ã¬ã³ãŒããæ€çŽ¢ããå ŽåãPRIMARY KEY ãã€ã³ããã¯ã¹å€ãæå®ããŠåæ§ã®æ€çŽ¢ãè¡ãå Žåã«æ¯ã¹ãŠãçŽ 2 åã®éåºŠã§æ€çŽ¢ããããšãã§ããŸããïŒçè èš³ïŒ
ãã®æãããŒãã«ã®äž»ããŒã rowid ãšåãã§ããã°ãäž»ããŒã§ãåãé床ãåŸãããã®ã§ãã
å³å¯ã«ã¯ãããŒãã«äœææã«äž»ããŒã®åã INTEGER PRIMARY KEY ã§å®çŸ©ããããŒãã«ãè€æ°ã®äž»ããŒãæããªãå Žåã«éããŸãã
ãšããã®ããããŒãã«ã 1 ã€ã ãäž»ããŒãæã¡ãINTEGER PRIMARY KEY ã§å®£èšããããšãåè¡ã®äž»ããŒã rowid ã®ãšã€ãªã¢ã¹ãšãªã SQLite3 ã®ä»æ§ã䜿ããã®ã§ãïŒãã®æ INTEGER PRIMARY KEY ã§ãªã INT PRIMARY KEY ãš INT ã§å®£èšãããšãã¡ãªã®ã§æ³šæïŒã
If a table has the primary key that consists of one column, and that column defined as
INTEGER, exactlyINTEGERin any cases, such as,INTEGER,integer, etc., then this primary key column becomes an alias for the rowid column.衚ïŒããŒãã«ïŒã®äž»ããŒãïŒã€ã®åã§æ§æããããã€ãã®äž»ããŒã倧æåã»å°æåé¢ä¿ãªã
INTEGERïŒINTEGER,integer,INTteger, etc.ïŒãšå®çŸ©ãããŠããå Žåããã®äž»ããŒã¯rowidåã®_ãšã€ãªã¢ã¹_ã«ãªããŸããïŒçè èš³ïŒ
- SQLite Primary Key @ SQLiteTutorial.net
- SQLite Create Table @ SQLiteTutorial.net
äž»ããŒã rowid ã®ãšã€ãªã¢ã¹ã«ãªããµã³ãã«
å®éã« INT ã§å®£èšããããŒãã«ãš INTEGER ã§å®£èšããããŒãã«ã® SQLite3 å
ã®ããŒã¿æ§é ã®éãã確èªããŠã¿ãããšæããŸãã
SQLite3 èªèº«ã®æåã§ãããããããã°ã©ã èšèªã«äŸåããªã蚌æ ã« bash ã§æžããŠã¿ãããšæããŸããsh zsh ã©ã®ã·ã§ã«ã§ã倧äžå€«ã ãšæããŸãã
ããŒãã«äœæã® SQL æã¯ CREATE TABLE [ããŒãã«å]([ããŒãã«æ§æ]) ã§ããSQL ã®ã³ãã³ãã¯ã倧æåã»å°æåã¯é¢ä¿ãããŸãããïŒCREATE ã create ãåãïŒ
ãŸããäž»ããŒåã¯ãmyIDããšããäž»ããŒã®å®£èšã«ã¯ PRIMARY KEY ãæå®ããŸãã
ãããŠãäž»ããŒã®åã INT ã§å®£èšããããŒãã«åã table1ãINTEGER ã§å®£èšããããŒãã«ã table2 ãšããŸããtable1 ãåŸæ¥ã®ããŒãã«ãtable2 ãåéã®ããŒãã«ã§ãã
ãŸãããã«ãšã±ãšããŠããªãã·ã§ã³ã® NOT NULL ã§ã空ã®å€ã® myID ã¯èš±ããªããããšã«ããæ¿å
¥ããããŒã¿ã¯äž¡ããŒãã«åããã®ãšããŠã¿ãããšæããŸãã
ãªããæ¿å
¥é ãèŠãããã« myID ã®å€ããããšé
#!/bin/bash
name_db='sample.db'
# Create table 1 and 2 and insert same data
sqlite3 $name_db <<'HEREDOC'
create table table1(myID INT not null primary key, myName Varchar);
insert into table1 values(100, "First value with ID 100");
insert into table1 values(10, "Second value with ID 10 ");
insert into table1 values(1, "Third value with ID 1 ");
create table table2(myID INTEGER not null primary key, myName Varchar);
insert into table2 values(100, "First value with ID 100");
insert into table2 values(10, "Second value with ID 10 ");
insert into table2 values(1, "Third value with ID 1 ");
HEREDOC
echo '- DB created with sample.'
次ã«ãDB ã®äžèº«ã確èªããŠã¿ãŸããSQL æ select rowid, * [ããŒãã«å] ã§ rowid ã®è¡šç€ºããã³å
šãŠã®ããŒã¿ãéžæããŠããŸãã
ãŸãã¯ãäž»ããŒã rowid ã®ãšã€ãªã¢ã¹ã§ã¯ãªã table1 ã§ãã
# .header on ãš .mode column ã¯èŠæ ããæŽãã SQLite3 ã³ãã³ãã§ã
echo '- Table1'
sqlite3 $name_db <<'HEREDOC'
.header on
.mode column
select rowid, * from table1;
HEREDOC
- Table1
rowid myID myName
---------- ---------- ------------------------
1 100 First value with ID 100
2 10 Second value with ID 10
3 1 Third value with ID 1
rowid é ã«äžŠãã§ãããrowid ãš myID ã®å€ãåãã§ãªãããšã確èªããŠãã ããã
ãã®ããŒãã«æ§æã®å ŽåãmyID ã§ myName ãæ€çŽ¢ãããšããŸã㯠myID ãš rowid ãçŽã¥ããããã«èªåäœæãããããã·ã¥ããŒãã«ãæ€çŽ¢ããŠè©²åœãã rowid ãèŠã€ããŸãã
ãããŠãèŠã€ãã rowid ãã該åœãã myName ã®å€ãæ¢ãããã®å€ãè¿ããŸãã
ã€ãŸã myID â rowid â myName ãšã¯ã³ã¯ãã·ã§ã³å
¥ãããšã«ãªããŸãïŒããèªäœã¯ RDB ãšããŠæ£ããåãã§ã飿³é
åãªã©ãåãä»çµã¿ã§å€ãæ¢ããŸãïŒã
ããã§ã¯æ¬¡ã«ãrowid ãäž»ããŒã®ãšã€ãªã¢ã¹ã«ãªã£ãŠãã table2 ã§ããåéã®æ¹ã®ããŒãã«ã§ãã
echo '- Table2'
sqlite3 $name_db <<'HEREDOC'
.header on
.mode column
select rowid, * from table2;
HEREDOC
- Table2
myID myID myName
---------- ---------- ------------------------
1 1 Third value with ID 1
10 10 Second value with ID 10
100 100 First value with ID 100
SQL æã§ select rowid, * ãšããŠããã®ã« rowid ã myID ãšåãïŒãšã€ãªã¢ã¹ïŒã§ããããšããããŠïŒåç®ã® myID é ã«äžŠãã§ããããšã確èªããŠãã ãããïŒDB ã®ç»é²é 㯠100â10â1ïŒ
ãã®ããŒãã«æ§æã®å ŽåãmyID ã§ myName ãæ€çŽ¢ãããšãçŽæ¥ rowidïŒã®ãšã€ãªã¢ã¹ã® myIDïŒã® myName ãè¿ããŸããäŸãã°ãç¹å®ã® rowid ã§ myName ã®å€ãååŸãããå Žåã¯ä»¥äžã®éãã
select myName from table2 where rowid = 100;
- ãªã³ã©ã€ã³ã§åäœãã¿ã @ paiza.IO
rowid ãäž»ããŒ
ãã®ãäž»ããŒã rowid ã®ãšã€ãªã¢ã¹ã«ãªã仿§ã«ãããäž»ããŒåããããrowidããžã®å€æã¹ããããçç¥ãããããŒãã«ã®äž»ããŒã rowid ãšåãæ±ãã«ãªãã®ã§éãããšããå¡©æ¢
ã§ãã
å ã ã¯ãã°ã ã£ããããªã®ã§ããäžäœäºæã®ããæ®ããã仿§ãšãªã£ãããã§ãã
ãããŠãäž»ããŒïŒPRIMARY KEYïŒã rowid ãšåããšããããšã¯ãä»»æã® rowid ãæ¯ãããšããããšã§ããããŸãã
ãšãªããšãSQLite3 ã§æ±ããããŒïŒrowidïŒã®æå€§é·ã§ãã 8 ãã€ãã®æ°å€ïŒ64 ããããæåã§ãããš 16 æåã® HEX æååïŒãããã«äœãããåé¡ã«ãªããŸãã
Except for
WITHOUT ROWIDtables, all rows within SQLite tables have a 64-bit signed integer key that uniquely identifies the row within its table. This integer is usually called the "rowid".ïŒROWIDs and the INTEGER PRIMARY KEY | CREATE TABLE @ SQLite.org ããïŒ
ãçè èš³ã
WITHOUT ROWIDã§å®çŸ©ãããããŒãã«ãé€ããŠãSQLite ã®ããŒãã«å ã®ãã¹ãŠã®è¡ã«ã¯ãããŒãã«å ã®è¡ãäžæã«èå¥ãã 64 ãããã®ç¬Šå·ä»ãæŽæ°ããŒãæã¡ãŸãããã®æŽæ°ã¯éåžžãrowidããšåŒã°ããŸãã
ïŒçè æ³š: 64 ãããã®ç¬Šå·ä»ãæŽæ°ãšã¯-9,223,372,036,854,775,808ã9,223,372,036,854,775,807ã®ç¯å²ã®æŽæ°ãHEX ã®å Žåã¯-80000000000000007fffffffffffffffãã笊å·ä»ãããšããã®ã¯ããã€ããªã»ããŒã¿ã®æåã®ããããããã€ãã¹å€ããã©ã¹å€ãã瀺ã笊å·ããšããŠäœ¿ãããŠããå€ã®ããšãïŒ
ãã¯ããçéã®èªåé£çªãäžçªæ¥œã§ãããŒã®è¡çªããªãå¹ççã§ããåºæ¬èšèšããã£ããããŠããã°ããããäžçªã ãšæããŸãã
ããããïŒç§ã®ïŒãŠãŒã¶ã«ãšã£ãŠã¯å€ãªãã€ã¢ã¹ãããã
ãšããã®ããæŽå²çäºæ ã§ããŒã¿ã® ID ã DB ã®äž»ããŒãšåãã«ããŠãããšãããã¡ã¡ã仿§ã®ãããåœç¶ã®çµæãšããŠãæ å ±ã® ID çªå·ãæç³»åã«äžŠã¶ããã€ãŸãç»é²é ã«äžŠã¶ã®ã§ãããããšïŒç§ã®ïŒãŠãŒã¶ã¯ç¡æèã«å 容ã®åªå£ã決ããŠããŸãã®ã§ãã
ãID ãå°ãã â å€åã®æ å ±ããID ã倧ãã â æ°åã®æ å ±ããšãã£ãå ·åã§ãããã®ãããïŒç§ã®ãããªãªããã£ã³å±€ã¯ç¹ã«ïŒ ID ãå°ããæ¹ã質ãè¯ãã»æçã§ãããšæã蟌ãã§ããŸãã®ã§ãã芳枬ãããšãå®ã¯æã¡ãããã»èŠããããã ãã§ãçªå·ã«è³ªã¯ç¡é¢ä¿ã ã£ãã®ã§ããã
ããšãã£ãŠã察ãªããã£ã³å¯Ÿçã®ããã«ã©ã³ãã 㪠ID ã®å¯Ÿå¿è¡šãå¥éäœãã®ãé¢åãªã®ã§ãããŸãããã§ã«çŸè¡ããŒã¿ã® ID ã¯åšç¥ãããŠããã®ã§å ¥ãæ¿ãã¯å®¹æã§ã¯ãããŸããã
ããã§ãè¿ã èµ·ããããã§ãããããŒã¿ã®æ£åžãã«åããŠããã·ã¥é¢æ°ã䜿ã£ãŠ ID ãåºå®é·ã«ã§ããªãããšæš¡çŽ¢ãã¯ãããŸããã
Hash now, don't you cry
ããããã¯ãSQLite3 ã®äž»ããŒã rowid ãšåçã®å Žåã«ãäž»ããŒã®æå€§é·ã§ãã 8 ãã€ãã®æ°å€ãããã·ã¥é¢æ°ã§ããã«äœæãããã®å
·äœçãªå
容ã«ãªããŸãã
PHP ã®å Žåãfnv1 ç³»ïŒfnv164 ããã㯠fnv1a64ïŒã®ã¢ã«ãŽãªãºã äžçºã§ 8 ãã€ãïŒ64 bit, 16 æ¡ã® HEX æååïŒã®ããã·ã¥ãäœããŸãã
- FowlerâNollâVo hash @ Wikipedia(EN)
- FNV Hash@ FNVå ¬åŒ
- ã軜éããã·ã¥ã¢ã«ãŽãªãºã ã@ Qiita
ãã®ãããå€ãããŒãåçŽã«ããã·ã¥åããŠåç»é²ããã°æ¥œã«ç§»è¡ã§ããŸããããããéãã
$key_prime_new = hash('fnv164', $key_prime_old);
ãšããããããã€ãåé¡ãããã®ã§ãã
çŸåšããã®èšäºã§è©±é¡ã«ããŠãããèŠãªããã£ã³å¯Ÿç DBããæ±ã£ãŠããããŒã¿ã¯ç»é²åŸã®å€æŽã¯ãããŸããããããããã倿ŽããŠã¯ãããªããã®ãªã®ã§ãã
ãšãããèªç±åºŠã®é«ãèšèšã§ããããããèªåã®ç¬æãšéœåã«ããäœæ ãåæã«å€ãå€ãã¡ããäžéšã®å±€ïŒäžæµããªããã£ã³å±€ïŒããããŸããããã®å±€ã«åŒ±ãäžåžããã³ããœãªãšæç€ºãåãããã³ãããã¯ã¢ããããå ã«æ»ãäœæ¥ã®ã€ã¿ããã£ãã宿çã«çºçããŠããŸããã
ããã§ã¯ãã€ãã¯ç倧ãªãã«ããããããŸãããä»çµã¿ãšããŠã®ãã«ãããå¿ èŠãšæããããå°ã工倫ãããããªãšæããŸããã
æšä»ã®è¡æ¿ã®æ¹ããåé¡ã§ãææ¡ãããŠããææžã®ããã·ã¥åã ID ãšããŠåãå ¥ããããšèããã®ã§ãã
CAS 㪠DB ãšåŒã°ããããšã
ææžã®ããã·ã¥å€ã ID ã«ãããã€ãŸãã€ã¡ãŒãžã§ã¯ããããããšã§ãã
// æ§IDã§ããŒã¿ååŸ
$value = fetchValueFromDB($key_prime_old);
// ããŒã¿ â ããã·ã¥åïŒ16é²ïŒâ 10é² â æŽæ°
$key_prime_new = (integer) hexdec(hash('fnv164', $value));
ãã®ãããªãã³ã³ãã³ãã®ããã·ã¥å€ã ID ã«ãã DB ããContent-addressable storageïŒCASïŒããšèšããŸããgit ã IPFS ãªã©ã CAS ã®äžçš®ã§ãã
å ã®ãèŠãªããã£ã³å¯Ÿç DBãã¯ããŠãŒã¶ã枬å®ããããŒã¿ã®å€ãšåãå€ã®ãã®ã DB ããæ¢ããé¢é£æ å ±ïŒãããããè¡ã®ããŒã¿ïŒãè¿ããçšéã«äœ¿ãããŠããŸãã
ãããããããšæã€ãããããšããŒã³ãŒããèªã¿èŸŒããšããããšããŒã¿ã衚瀺ãããã·ã³ãã«ãªãã®ã§ãã
ã€ãŸãããŠãŒã¶åŽïŒã¯ã©ã€ã¢ã³ãåŽïŒã§æž¬å®ããããŒã¿ãããã·ã¥åãããã®ãããŒãšã㊠DBïŒãµãŒããŒåŽïŒã«æž¡ããDB ã¯åãåã£ãããŒãæ€çŽ¢ããã°é床æ¹åã»æ¹ãã鲿¢ã»ãªããã£ã³å¯Ÿçã®è¯ããšãåãã«ãªããŸããDB ãã·ã³ãã«ã«å®è£ ã»æ§æã§ããŸãã
ããã§ãããïŒã€åã®ç»é²ããŒã¿ã®ããŒãããã·ã¥åããŠãã£ãŒã«ãã«å å ïŒåã远å ïŒããã°ããããã¯ãã§ãŒã³ã«è¿ãèãæ¹ã«ãªããŸãããããããã SQLite ãªã®ã§ãåæãããããŒã¿ã¯åã¯ã©ã€ã¢ã³ãïŒãŠãŒã¶ïŒã®ããŒã«ã«ã«ãããŸããã
ããŠããã®æ¹æ³ã§ãã¹ããããšãããä»ã®ãšããïŒåä»¶ã¡ãã£ãšã®æ¢åããŒã¿ã§è¡çªããªãåé¡ãªããããªã®ã§ãããïŒã€ã®ã¢ã«ãŽãªãºã ã«äŸåããããªããšããæ°æã¡ããããŸããããããããã·ã¥å€ã®è¡çªãæãã®ã§ãã
ããããããã®çšåºŠïŒ10 幎㧠1ã2 åä»¶çšåºŠïŒã®ããŒã¿éã§ããã°ãSQLite3 ã® 1844京6744å 737å件以äžã䜿ãã 8 ãã€ãïŒ64ãããïŒã®ããŒããã®ãŸãŸäœ¿ãã®ã¯ãã£ãããªãã®ã§ãã倧ã¯å°ãå Œãããšã¯èšãã貞ãå庫ã¯ã©ã¹ãªã®ã«ããºããŒã©ã³ãã»ã¯ã©ã¹ã®ã¹ããŒã¹ã䜿ããããªãã®ã§ãã
ååãªå¹Žæ°ã«èãã€ã€ãè¡çªã«é¢ããŠã¯é³©ã®å·£åçïŒé³©ã®æ°ããå·£ç®±ã®æ°ãå°ãªããšãïŒã€ä»¥äžã®å·£ç®±ã§è¡çªãèµ·ããåçïŒã¯å°ãªããšãç¶²çŸ ã§ãããã€ãã®é·ããæ€èšããçµæãæé· 4 ãã€ãé·ïŒ= 42.9 ååïŒã®ããŒãšããŸããã
ãããŠãå
ã®ãè¡çªããŠãå¥ã®ã¢ã«ãŽãªãºã ã ãšè¡çªããªãïŒå¯èœæ§ãé«ãïŒãå±çå±ãåãå
¥ããŠãã4 ãã€ãã® A åããã·ã¥å€ + 4 ãã€ãã® B åããã·ã¥å€ = 8 ãã€ãã®ããŒããäœã£ãŠã¿ãããšæããŸããã
å
·äœçã«ã¯ 4 ãã€ãé·ã®ããã·ã¥ã»ã¢ã«ãŽãªãºã ã§ãã crc32 ãš fnv132 ã®ïŒã€ãããããŠä»¥äžã®ãã㪠PrimeããŒã®ç®åºãèããŸããã
$key_prime_hex = hash('fnv132', $value) . hash('crc32', $value);
å³å¯ã«èšããš CRC-32 ã¯ããã·ã¥ã§ã¯ãªããã§ãã¯ãµã ãªã®ã§ãããèšç®ã³ã¹ããã±ãã£ãŠããŸããŸããããããåŸã«æžå¿µãç£ãããšã«ãªããŸãã
å
ã® fnv-1 64ïŒ8 ãã€ãé·ã®ã¢ã«ãŽãªãºã ïŒåäœãšæ¯ã¹ãŠïŒåãããéããªãã®ã§ãããç§»è¡ã®ããã®äžæ¬ç»é²ã®ããŒã¿éã 500 äžä»¶ãè¶ãããããããããããé
ããªããŸãããã¢ã«ãŽãªãºã ã®çµã¿åããã«ããããšæããŸãããã¢ã«ãŽãªãºã ã«ãã£ãŠã¯åæåã«åå ãããããã§ãã
ããããæ¬çªããŒã¿ã¯äžæ¬ INSERT ãããäºå®ã§ããã€ãŸããäžæŠ DB ããã³ãåºåããŠäž»ããŒãæŽåœ¢ããŠãããããŒã¿ãæ°èŠ DB ã«äžæ¬ã§ INSERT ãããæãã§ãã
ãŸããå®éã®çšéã§ã¯æ°èŠç»é²æã®é床ã¯ãã»ã©å¿ èŠãšãããŠããããç»é²é »åºŠãé«ããããŸããããããç»é²ããæ¥ã ã®åŒãåºãæã®é床ãéããªã£ãããšã®ã»ããæ¹åæããã£ãŠè¯ããšæããŸãã
æå ã®ïŒå件匱ã®ãµã³ãã«ã»ããŒã¿ã§ããã®ã¢ã«ãŽãªãºã ã®çµã¿åããã§è¡çªã¯çºçããŸããã§ãããããããã¢ã«ãŽãªãºã ã®ä»æ§ã調ã¹ãŠãããã¡ã«ç¢ºä¿¡ãæãŠãªããªããŸããã
éæå·åŠçããã·ã¥ã«æ©ã
CRC ã¯ãã§ãã¯ãµã ãªã®ã§ããŒã¿ãé£çªã®å Žåã«åŒ±ãã®ãšãfnv-1 ç³»ïŒFowlerâNollâVoïŒã®ã¢ã«ãŽãªãºã ã¯éæå·ååããã·ã¥ãã€ãŸãæå·åŠçããã·ã¥é¢æ°ã§ã¯ãªããããã¹ãã£ãããŒã¹ããŒããšåŒã°ããåé¡ãåãã§ããŸããïŒæå·åŠçããã·ã¥ã«ã€ããŠã¯äžéšãããã·ã¥é¢æ°ã®åºæ¬ãšç¹åŸŽãåç
§ïŒ
Sticky State â Being an iterative hash based primarily on multiplication and XOR, the algorithm is sensitive to the number zero. Specifically, if the hash value were to become zero at any point during calculation, and the next byte hashed were also all zeroes, the hash would not change. This makes colliding messages trivial to create given a message that results in a hash value of zero at some point in its calculation. Additional operations, such as the addition of a third constant prime on each step, can mitigate this but may have detrimental effects on avalanche effect or random distribution of hash values.
ïŒNon-cryptographic hash | FowlerâNollâVo hash function @ Wikipedia ããïŒãçè èš³ã
ã¹ãã£ãããŒã¹ããŒã âFowlerâNollâVo颿°ã¯ãäž»ã«ä¹ç®ãš XOR ã«åºã¥ãå埩ããã·ã¥ã§ããããããã®ã¢ã«ãŽãªãºã ã¯æ°å€ãŒãã«ææã§ããå ·äœçã«ã¯ãããã·ã¥å€ãèšç®äžã®ããããã®æç¹ã§ãŒãã«ãªããç¶ããã€ãã®ããã·ã¥ããã¹ãŠãŒãã§ãã£ãå Žåãããã·ã¥ã¯å€åããŸãããããã«ãããèšç®ã®ããæç¹ã§ããã·ã¥å€ããŒãã«ãªãã¡ãã»ãŒãžãäžããããå Žåãè¡çªããã¡ãã»ãŒãžãç°¡åã«äœæã§ããŸããåã¹ãããã§ç¬¬ïŒã®çŽ æ°ã宿°ãšããŠè¿œå ãããªã©ã®æäœã§ãããã軜æžã§ããŸãããã¢ãã©ã³ã·ã§å¹æãŸãã¯ããã·ã¥å€ã®ã©ã³ãã ååžã«æå®³ãªåœ±é¿ãäžããå¯èœæ§ããããŸãã
çè ãè¯ãçè§£åºæ¥ãŠããªãã®ã§ãããfnv-1 ã¯äž»ã«ããã·ã¥ããŒãã«ããã§ãã¯ãµã ã§äœ¿çšããããã«é床ãåªå ããŠèšèšãããããã·ã¥é¢æ°ãšããŠéçºããããããæå·åŠçããã·ã¥é¢æ°ãšæ¯èŒããŠã©ã³ãã æ§ã«æ¬ ãããšããããšã®ããã§ããã€ãŸã fnv-1 ã CRC 㚠䌌ãé£çªã«åŒ±ãåé¡ãæã£ãŠããã®ã§ãã
ãã® DB ã®ä»çµã¿ããããçš®ã®ããã·ã¥ããŒãã«ãšäŒŒãŠã¯ãããã®ã®ããã® CRC ãš fnv-1 ã®çµã¿åããã§ã¯ã³ã³ãã³ãã®é«éãªç¢ºèªã«ã¯äœ¿ããŠã ID ãšããŠã¯å³ããäºæãããŸãããªããããžã¬ã³ãã
ãšãªããšããã忣æ§ã®é«ãã¢ã«ãŽãªãºã ã§ãã SHA ãªã©ã®æå·åŠçããã·ã¥ã®äžéšã䜿ã£ãæ¹ãè¯ãããšãããããŸããã
åé¡ã¯ã³ã¹ãïŒé床ïŒã§ãã
ããããèšäºäžéšã®åã¢ã«ãŽãªãºã ã®æž¬å®é床ãèŠãŠããããããã« PHP7 ã®å Žå 100 äžåã¶ãåã㊠0.n ç§ã®å·®ã§ããPHP8 ã ãšããã«æ°åéããªãã®ã§ã埮ã ããå·®ã ãšæããŸãã
ãã®ãããCRC-32 ã fnv-1 ã䜿ããã㯠Git ã®ã³ããã ID ã®ããã« SHA-256, SHA-512 ã SHA3-512 ãªã©ã®ããã·ã¥å€ã®é 4 ãã€ãã䜿ãã®ãããããããšæãããŸãã
ð  ç§ã¯ããããããšã«ããŸããããã®ä»çµã¿ãèªããããããã«ã¯ PHP8 ããªãªãŒã¹ããããšæããããã€ã Wikipedia ã®ããŒã¿ãã¶ã£èŸŒãã§æ€èšŒããŠã¿ãããšæããŸãã
ã©ããã倿Žã§ããªãä»çµã¿ãäžéšã§éœåãæªããããæ¡çšãããªãããã£ãŠããã®ä»äºãèŸãã¡ãã£ãã®ã§å®è£ ããããšããªããã§ããããããã®ãâ€ïžããããã ããã®ã§æš¡çŽ¢ããŠããã£ããšæããŸãã
$len = 8; //4ãã€ãã®HEXæååé·
$value = fetchValueFromDB($key_prime_old);
$hash1 = substr(hash('sha3-512', $value), 0, $len);
$hash2 = substr(hash('sha512', $value), 0, $len);
// 8ãã€ãã®äž»ããŒ
$key_prine_new = (integer) hexdec($hash1 . $hash2); // å®éã«ã¯ ± ã®ç¬Šå·ç¢ºèªã®ãã $hash1 ã®äžçªå·Šã®æåããŽãã§ãŽãã§ããŠãŸã
- ãªã³ã©ã€ã³ã§åäœãèŠã @ paiza.IO
ïŒãïŒ ããããKVS ã§ããããããã£ãŠïŒãŸããŸãâŠãããããæ¯ããæè¡ã奜ãã®ãæ³ãªãã§ããããïŒ
-
RFC-1146 TCP Alternate Checksum Options @ ietf.org â©
-
SQLite3ãšã¯ãèäœæš©ã®çºçããªããªãŒãã³ãœãŒã¹ã®ããŒã¿ããŒã¹ç®¡çã·ã¹ãã ã§ããååãããããããã« SQL ã®æ§æã§ããŒã¿ã«ã¢ã¯ã»ã¹ã§ãããªã¬ãŒã·ã§ãã«ã»ããŒã¿ããŒã¹ïŒRDBMSïŒã®ïŒã€ã§ãã
ãç¹åŸŽãšããŠã¯ãæ¬äœãåäœã軜éã§ãããããšãšããµãŒããŒãç«ãŠãã«äœ¿ããããšãããããŸãããµãŒããŒåã§ãªããããè€æ°ãŠãŒã¶ãŒãè€æ°ã¢ããªããã®åæå©çšã«ã¯åããªãã®ã§ãããã¢ããªããšã«ããŒã¿ãä¿åããå Žåã«åšåãçºæ®ããã¿ã€ãã§ãã
ãã¢ãã€ã«ã»ã¢ããªãã²ãŒã ãªã©ã®ããŠã³ããŒãããã£ãã·ã¥ã»ããŒã¿ã§ãã£ãããmacOS ã®å Žåã¯æšæºã§ã€ã³ã¹ããŒã«ãããŠãããSpotlight ãªã©ã®æ€çŽ¢çšã® DB ãšããŠã䜿ãããŠããŸããïŒsqlite3 -helpã§ç¢ºèªå¯èœïŒ
ããªã¢ã«ã¿ã€ã ã«æ¿ããå€åããããŒã¿ã§ãªãå Žåãã¢ããªèµ·åæã«æ¬èŠãšãªããµãŒããŒããããŒã¿ã»ããŒã¹ãããŠã³ããŒãããŠããŒã«ã«ã«ä¿åããããšã§ããããã¯ãŒã¯ã®ãã©ãã£ãã¯ãæžããããããªãã©ã€ã³ã§å©çšãããããã¬ã¹ãã³ã¹ã®åäžã«äœ¿ãããããã䟿å©ãªããã°ã©ã ã§ãã
é¢é£ãªã³ã¯ïŒSQLite @ Wikipedia æ¥æ¬èª â©

















