ã«ãªãã©ã«ãã¢å·ã¢ã«ããŒã¯ãªãŒã¯ã®SequoiaStagg
2018幎ã3人ã®å GnuPGéçºè ããRustã§ã®OpenPGPã®å®è£ ã§ããSequoiaãããžã§ã¯ãã®äœæ¥ãéå§ããŸããããåç¥ã®ããã«ãOpenPGPã¯ãå®å šãªé»åã¡ãŒã«ã«ãã䜿çšããããªãŒãã³ããŒã¿æå·åæšæºã§ããGnuPGã¯ããã®æšæºã®ãªãã¡ã¬ã³ã¹å®è£ ã§ãã
éçºè èªèº«ããæ°ããOpenPGPã©ã€ãã©ãªãäœæããåæ©ã«ã€ããŠæ¬¡ã®ããã«è¿°ã¹ãŠããŸãã
- GnuPGã¯å€æŽãå°é£ã§ããã³ãŒããšAPIã¯21幎以äžã«ããã£ãŠèç©ãããŠããŸããããŠããããã¹ãã¯ãããŸãããã³ã³ããŒãã³ãã¯äºãã«å¯æ¥ã«é¢é£ããŠããŸããã¢ãŒããã¯ãã£ã«ã¯å€ãã®èŠæãæ®ãããŠãããåçŽãªãªãã¡ã¯ã¿ãªã³ã°ã¯åœ¹ã«ç«ã¡ãŸããã
- å€ãã®éçºè
ã¯GnuPGAPIã«äžæºãæã£ãŠããŸããGnuPGã³ãã³ãã©ã€ã³ããŒã«ãšå¯Ÿå¿ããããã°ã©ãã³ã°ã©ã€ãã©ãªã®æ©èœã¯ç°ãªããäžéšã®ã³ãã³ãã¯ã³ãã³ãã©ã€ã³ããã®ã¿äœ¿çšã§ããŸãã
- Rustã¯ãã¯ã©ã¹å
šäœã®ãã°ãèªåçã«æé€ããã¡ã¢ãªã»ãŒãèšèªã§ãã
- GPLã®å¶éã«ãããGnuPGã¯iOSã§ã¯äœ¿çšã§ããŸããã
GPLv2ã©ã€ã»ã³ã¹ã®Sequoiaã©ã€ãã©ãªã¯çŸåšããŒãžã§ã³1.0ã«è¿ã¥ããŠããŸããã察åŠãã¹ãåé¡ããŸã ããã€ããããŸãã
GnuPGã®æ¹å€
æ°ããã©ã€ãã©ãªã«ã¯ãGnuPGã®æ¬ ç¹ããªãã¯ãã§ãã OpenPGPã®ãåç §ãå®è£ ã«å ããŠãOpenKeychainãOpenPGP.jsãRNPãªã©ã®ä»ã®å®è£ ãããããšã«æ³šæããŠãã ããã
GnuPGã¯äœå¹Žãã®éæ¹å€ãããŠããŸãããããã¯ããã®ã°ãããè€éããæ®éçãªã¹ã€ã¹ã®ãã€ãã®ãã¶ã€ã³ã§æ¹å€ãããŠããŸãããGnuPGã¯ãããžã¿ã«çœ²åããã¹ã¯ãŒãä¿è·ãå ¬ééµã®æå·åãå®å šãªãã¡ã€ã«è»¢éããã±ãã眲åãããã¯ã¢ããä¿è·ããã£ããã¡ãã»ãŒãžã³ã°ãªã©ããã¹ãŠãããŸãå®è¡ããŸãã .dãçŸä»£ã§ã¯ãå°çšã®ããŒã«ãå¿ èŠã§ãããšèããããŠããŸããå®å šãªã¡ãã»ãŒãžã³ã°çšã®å¥ã®ã©ã€ãã©ãªãããã±ãŒãžã«çœ²åããããã®å¥ã®ã©ã€ãã©ãªããã¡ã€ã«ã®æå·åçšã®å¥ã®ã©ã€ãã©ãªïŒãŠãŒãã£ãªãã£ãšããŠïŒRustã§æžãããæãïŒãªã©ããŸãããããã®ãŠãŒãã£ãªãã£ã®ãã¹ãŠãå®å šã«PGPã«æºæ ããŠããå¿ èŠã¯ãããŸããã
OpenPGPã90幎代ã®æå·ãšã®äžäœäºææ§ãè¿œæ±ããŠããããšã¯æ¹å€ãããŠããŸããã€ãŸããããã©ã«ãèšå®ã¯åŒ·åãªæå·åã®ææ°ã®ãã¹ããã©ã¯ãã£ã¹ã«å¯Ÿå¿ããŠããããã»ãã¥ãªãã£ã¯ããŽã·ãšãŒã·ã§ã³ãããã³ã«ãéããŠåžžã«å¯èœã§ããåé¡ã¯ãããããšã¯äžå¯èœã§ãããšããããšã§ãããšåæã«ãäžäœäºææ§ãç¶æããçŸä»£ã®å®å šãªæå·ã«æºæ ããŠããŸãã
ã¬ããŒãžã³ãŒãã«ã€ããŠã¯ãã§ã«èª¬æããŸããããäºå®äžã®æšæºã®PGPå®è£ ã¯GnuPGã§ãããã®ããã°ã©ã ã¯ããŸããããã«æžãããŠããŸãããåºç¯ãªCã³ãŒãããŒã¹ããããŸã-éè€ããæ©èœãåããèšèªïŒããšãã°ãSKS解æã«å¯Ÿããæè¿ã®ãµãŒãã¹æåŠæ»æã§ã¯ãè€æ°ã®ããŒããŒãµãŒããããšèšãããŠããŸãïŒãšãã¡ã¢ãªã®ç Žæããæå·åæ»æãŸã§ã®é·ãCVEã®å®çžŸããããŸããµã€ããã£ãã«çµç±ã GnuPGãæ°ä»ããªããã¡ã«ãã¡ãã»ãŒãžããèªèšŒãåé€ã§ããå ŽåããããŸãããããªãã¯æ£ããæçŽãªãã§åœŒã«éµãäžãããããããŸããã 2018幎ãEfailã®è匱æ§ã¯ãGnuPGãèŠæ±ã«å¿ããŠèªèšŒãããŠããªããã¬ãŒã³ããã¹ããæäŸããããšã«ãã£ãŠåŒãèµ·ããããŸããããšLatacoraã¯æžããŠããŸãã
ãã1ã€ã®åé¡ã¯ã䜿ããããã§ãã
æ°å¹ŽåãPGPã®äœ¿ããããã®èª¿æ»ãå®æœãããæè¡è ã®ã°ã«ãŒããã³ã³ãã¥ãŒã¿ãŒã®ããéšå±ã«é 眮ãããPGPã®æ§æãäŸé ŒãããŸããã2æéåŸããŸã åºãŠããªãã£ãã-ããããŠãŒãã¹ããOpenBSDã®ãšLibreSSLéçº
ä»ã®äžæºã¯ãåãããŒã®é·æä¿åã®äžå®å®ããå®å šã«åŒ±ãMDCæå·åããã¹ãèªèšŒã·ã¹ãã ãåæ¹ã®ç§å¯ã®æ¬ åŠãããã³äžåšçšãªå·šå€§ãªããŒã§ãã
ã»ã³ã€ã¢ãããžã§ã¯ã
Sequoiaã¯ããããã®åé¡ã®å€ãã解決ããææ°ã®OpenPGPããŒã«ãããã§ãããšLWNã¯æžããŠããŸããã»ã³ã€ã¢ã¯ãã§ã«ãå«ãããã€ãã®ä»ã®ãããžã§ã¯ãã§æ¡çšãããŠããkeys.openpgp.orgãOpenPGPã®CAãkovertoãPijulãšKIPAã
ãã®ãããžã§ã¯ãã¯ãpâ¡pïŒpepïŒãšWau Hollandã®è²¡å£ã«ãã£ãŠè³éæäŸãããŠããããã¹ãŠã®éçºã¯ãªãŒãã³ãœãŒã¹ã§ãã
æ°ããã©ã€ãã©ãªã¯ãæãä¿¡é Œæ§ã®é«ãææ°ã®æå·åã䜿çšããªãããã»ãã¥ãªãã£ãšæ£ç¢ºæ§ã«éç¹ã眮ããŠããŸããéçºè ã¯ãã³ãã³ãã©ã€ã³ããã°ã©ã ãGitã¹ã¿ã€ã«ã®ãµãã³ãã³ããªã©ã®åŒ·åãªããŒã«ãçŽæããŸãã
$ echo hi | sq encrypt --recipient neal
-----BEGIN PGP MESSAGE-----
wcBMA8K4GQVsZSWYAQgAllrQ+9490eoFdB/jLrVvGl+IVtGJWPFDg9uhcl0D8k05
AWz8ZU2sd6GzoCH1nRpwASJWHxloNbPgvxhNRRVReg3GgfFwMkcoNJ2Xb4zocvx+
niH7ZlP9Py6kseuqtjhQZEyvtIfWc58TK9DRdPp5suzS3Y9Zbew9vC2N2u+8YsKL
BbbminTZqLYbt/00ZT/ZuDbtHhoDUxlnCK2Y2R6NZvuvwS1ujI0EOfdOagZO0z5k
hs8U9Xgk1/BWpQtKn3ygMDO0401nBBbwNgialcu/8yFS+wXoifRaj60Cbxhjv2/G
aTcl9loYpN93BL0a7EbKmcwDl14HwosKdkMj4Px25dI0AZjLxI7TBX18e+hBu5vr
q83G7aEwllpiDU3z+rFXBjsWDOwP2UBf05D/Bl05eSYx4x7UnQ==
=qAvC
-----END PGP MESSAGE-----
ããŒãµãŒãšãã±ããæ€æ»ã®ããã®æ確ãªã€ã³ã¿ãŒãã§ãŒã¹ãããã³16é²ãã³ããå®è£ ãããŸãããããã¯ããªã³ã©ã€ã³ãã¢ã§è¡šç€ºã§ããããã«ãªããŸããã
$ sq packet dump --hex message.pgp
New CTB, 13 bytes: One-Pass Signature Packet
Version: 3
Type: Binary
Pk algo: EdDSA Edwards-curve Digital Signature Algorithm
Hash algo: SHA512
Issuer: 83F8 2E4F E9A5 E098
Last: true
00000000 c4 0d frame
00000002 03 version
00000003 00 sigtype
00000004 0a hash_algo
00000005 16 pk_algo
00000006 83 f8 2e 4f e9 a5 e0 98 issuer
0000000e 01 last
gpgã³ãã³ãã©ã€ã³ããŒã«ãã©ã€ãã©ãªããã匷åã§ããGnuPGãšã¯ç°ãªããSequoiaã¯äž»ã«ã©ã€ãã©ãªã§ãããã®ãã¹ãŠã®æ©èœã¯ããªãŒãã³APIãä»ããŠå©çšã§ããŸãããã®ãããžã§ã¯ãã§ã¯ãAPIã®2ã€ã®ãã¬ã€ã€ãŒããæäŸããäºå®ã§ããOpenPGPä»æ§ã®äœã¬ãã«ã®å®è£ ãšããŠãŒã¶ãŒãããã±ãŒãžã®çœ²åã眲åã®æ€èšŒãªã©ã®äžè¬çãªã¿ã¹ã¯ãç°¡åã«å®è¡ã§ããããã«ããããã®é©åãªããã©ã«ããåããé«ã¬ãã«ã®APIã§ãã
$ sqv --trace --keyring tails-signing.key \
tails-amd64-3.11.iso.sig tails-amd64-3.11.iso
Will check signature allegedly issued by A8B0 F4E4 5B1B 50E2.
Found key A8B0 F4E4 5B1B 50E2.
Checking signature allegedly issued by A8B0 F4E4 5B1B 50E2.
Signature by A8B0 F4E4 5B1B 50E2 is good.
A490 D0F4 D311 A415 3E2B B7CA DBB8 02B2 58AC D84F
1 of 1 signatures are valid (threshold is: 1).
$ echo "Just check the exit status: $?"
Just check the exit status: 0
OpenPGPä»æ§ã®äœã¬ãã«ã®å®è£ ã«ãããããããéçºè ã¯MD5ããã·ã¥ãªã©ã®ããã€ãã®æ代é ãã§å±éºãªæšæºãæé€ããŸããã
ã€ãã·ã¢ããã®éå§åã§ããããããžã§ã¯ãã®åµèšè ã¯OpenPGPã³ãã¥ããã£ã®èåãªã¡ã³ããŒããšã³ããŠãŒã¶ãŒãšäŒãããããžã§ã¯ãã®èšç»ã«ã€ããŠè©±ãåãã圌ãã®ã¢ãããŒããæ¬åœã«æ£åœåãããããšã確èªããŸãããçŸåšã掻çºãªéçºãé²ãã§ããŸãããªããžããªãšãã©ãã«ãŒã®ãšã³ããªããå€æãããšãçŽ30人ã®åå è ãããã2020幎4æã®ããŒãžã§ã³1.0ã®æºåã®çºè¡šä»¥æ¥ã3ã€ã®ãªãªãŒã¹ãè¡ãããŠããŸããååã®ãªãªãŒã¹0.19.0ã¯2020幎8æã«ãªãªãŒã¹ãããŸããããã®æãé¡èãªæ¹åç¹ã¯ãããã¯ãšã³ããšããŠã®Windows Cryptography APIïŒNextGenerationã®çµ±åã§ããïŒCNGïŒéPOSIXç°å¢ã§åé¡ãããNettleã®ä»£ããã«ã
ã»ãã¥ãªãã£ã匷åããããã«ãSequoiaã¯å ¬éããŒãµãŒãã¹ãšç§å¯ããŒãµãŒãã¹ã®éã§ããã»ã¹åé¢ã䜿çšããããšãèšç»ããŠããŸãïŒgpg-agentã®ããã«ïŒãããã§ã¯ãããã»ã¹ééä¿¡ã®ããã«ãCap'n Protoã·ãªã¢ã«åãããã³ã«ãå°å ¥ãããŠããŸããããã¯ãããã³ã«ãããã¡ãŒã«äŒŒãŠããŸãããããé«éã§ãã
ãã¬ãŒã³ããŒã·ã§ã³ã®äžã§ãéçºè ã¯ãããšãã°iOSç°å¢ã§ã¯ãããã»ã¹ã®åé¢ãåžžã«å¯èœã§ãããšã¯éããªãããšãææããŠããŸããå©çšã§ããªãå ŽåãSequoiaã¯å ±æSQLiteããŒã¿ããŒã¹ã䜿çšããŠãäžçš®ã®ã³ãã±ãŒã·ã§ã³ãšããŠããã»ã¹å ã®ãµãŒãã¹éã§éä¿¡ããããšãèšç»ããŠããŸãã
Sequoiaã¯ããããªãã¯ããŒãã§ãŒã³ã«å¯ŸããŠæŠå¿µçã«ç°ãªãã¢ãããŒããæ¡çšããŠããŸãããããªãã¯ããŒãã§ãŒã³ã¯ããPGPããŒãã§ãŒã³ãšãããããã¢ãã¬ã¹ããã¯ã®ããã«ãèšèšãããŠããŸããããŒã¯ãŠãŒã¶ãŒèå¥åïŒpetnameïŒã«ãã£ãŠä¿åãããä¿¡é Œã¢ãã«ã®å®è£ ã«åœ¹ç«ã€ä»»æã®æ§é åããŒã¿ããã€ã³ãããæ©èœããããŸããéçºè ã¯ããã®ã¢ãããŒãã¯ããŠãŒã¶ãŒãå®éã«ããŒãè¡šçŸããæ¹æ³ãšããäžèŽããŠãããšèšããŸããããŒã¯ãæœè±¡çãªèå¥åã®ã»ããã§ã¯ãªããååã«é¢é£ä»ããããŠããŸããããã¯ãSequoiaãä»ã®OpenPGPå®è£ ãšç°ãªã1ã€ã®é åã§ãã
ããã«ããã¹ãŠã®ããŒã«ã¯ãããŒã®äœ¿çšç®çã瀺ããã¬ã«ã ããå²ãåœãŠãããŸããçŸåšããé£çµ¡å ããšããœãããŠã§ã¢æŽæ°ããŒãã®2ã€ã®ã¬ã«ã ããµããŒããããŠããŸãã
ããŒãã§ãŒã³ã¯ãªã¢ãŒããµãŒããŒããèªåçã«æŽæ°ããïŒparcimonieãšåæ§ïŒãå€æŽãæ°ãããµãããŒãããã³ããŒã®å€±å¹ãã¿ã€ã ãªãŒã«è¿œè·¡ããŸããããã¥ã¡ã³ãã«ã¯ãããäžè¬çãªTLSæå·åæ¹æ³ã«å ããŠãTorãªã©ã®å¿ååããããµãŒãã¹ã䜿çšããŠãããå®è¡ã§ããããšã瀺ãããŠããŸãã
Sequoiaã®ãã©ã€ããŒãããŒãã§ãŒã³ã®å®è£ ã¯ãåæ¹ã®ç§å¯ããµããŒãããŸãä»ã®å€ãã®ã©ã€ãã©ãªã«ã¯å®è£ ãããŠããªãOpenPGPä»æ§ãä»ããŠããããã®ä»æ§ã«ããããä¿åäžãã®ããŒã¿ïŒæå·åãããã¹ãã¬ãŒãžïŒãšã移åäžãã®ããŒã¿ïŒæå·åãããéä¿¡ïŒãåºå¥ã§ããŸããã»ãã¥ãªãã£ã®èŠ³ç¹ãããã移åäžãã®ããŒã¿ã®ããŒãå®æçã«å€æŽããã®ã¯è¯ãããšã§ããããä¿åäžãã®ããŒã¿ã埩å·åããæ©èœã¯ä¿æããŸããçºè¡šéçºè ã®äžäººããŠã¹ãã¥ã¹å¬ã¯ãä»ã®OpenPGPå®è£ ã«ã»ã³ã€ã¢ã®åé²ã®ç§å¯ä¿æã®æ©èœãæ¯èŒããŠããŸãã
ãã³ã®å©ç¹
Sequoiaã¯ã Rustã®ãã¹ãŠã®ã¡ã¢ãªå®å šäžã®å©ç¹ãå©çšããŠããŸãã
ã¡ã¢ãªã®å®å šæ§ãšã¯ãMichaelHicksã®èšäºã§åºã説æãããŠããŸããç°¡åã«èšããšãããã°ã©ã ãç¡å¹ãªã¡ã¢ãªã«ã¢ã¯ã»ã¹ã§ããªãç¶æ ã«ããããšãæå³ããŸãããããã¯æ¬¡ã®ãšã©ãŒã§ãïŒ
- ãããã¡ãªãŒããŒãããŒ;
- nullãã€ã³ã¿ã®éåç
§ã
- ã¡ã¢ãªã解æŸããåŸã«ãã€ã³ã¿ãä¿åããŸãïŒè§£æŸåŸäœ¿çšïŒã
- åæåãããŠããªãã¡ã¢ãªã®äœ¿çšã
- ããã°ã©ã ãåãã»ã«ã2å解æŸããããšããè©Šã¿ïŒããã«ããªãŒïŒã
ã¡ã¢ãªã»ãã¥ãªãã£éåã¯ãããŒã¿æŒæŽ©ããªã¢ãŒãã³ãŒãå®è¡ãªã©ã®è匱æ§ã«ã€ãªãããŸããäžéšã®èšèªã¯ãã¡ã¢ãªã®å®å šæ§ãšããåç®ã§ããã©ãŒãã³ã¹ã®äœäžã«èŸä»»ããŸããããRustã®æææš©ã®æŠå¿µã¯ãå®å šæ§ã確ä¿ãããªãŒããŒããããæå°éã«æããŸãã
Sequoiaã®çŸåšã®éçºã«åºã¥ããŠããªã°ã¬ãã·ã§ã³ãé²ããã³ãŒãã®å質ãåäžãããããã«ããŠããããã¹ããäœæããããã«å€å€§ãªåªåãæãããŠããŸãã
Sequoiaã¯ãLinuxãWindowsãmacOSãAndroidãiOSãªã©ã®ãææ°ã®ãã©ãããã©ãŒã ãã察象ãšããŠãããæ¢åã®æå·åããŒã«ãæ倧éã«æŽ»çšããŠããŸãããããžã§ã¯ãã®ç®æšã¯ãç¹å®ã®ãã©ãããã©ãŒã ã®æå·åãµãŒãã¹ãšã®ç·å¯ãªçµ±åã§ããããšãã°ãiOSããã€ã¹ã§ã¯ãSecureEnclaveã³ããã»ããµã䜿çšããããšãèšç»ãããŠããŸãå©çšå¯èœãªå ŽåãSequoiaã¯ããããžã§ã¯ããä»ã®èšèªã§èšè¿°ãããããã°ã©ã ãšçµ±åããããã®å€éšé¢æ°ã€ã³ã¿ãŒãã§ã€ã¹ïŒFFIïŒãæäŸããŸããçŸåšãPythonããã³Cã䜿çšãããã€ã³ãã£ã³ã°ïŒãã€ã³ãã£ã³ã°ïŒãæäŸãããŠããŸããããããã®ãã€ã³ãã£ã³ã°ã䜿çšããããã°ã©ã ã¯Rustã®çµã¿èŸŒã¿ã¡ã¢ãªã®å®å šæ§ã奪ãããŠãããããã¡ã¢ãªäœ¿çšéãæ£ããåŠçããããã®ç¹å¥ãªã«ãŒã«ãå ¬éãããŠããããšã«æ³šæããŠãã ããã
ã»ã³ã€ã¢ã³ã³ããŒãã³ã
ä»åŸã®èšç»
ããŒãžã§ã³1.0ã®ãªãªãŒã¹ã¯éããªãè¡ãããå¯èœæ§ããããŸãããæåã¯äœã¬ãã«ã®APIãã€ãŸãsequoia-openpgpã¯ã¬ãŒããšãã®äŸåé¢ä¿ã®ã¿ããªãªãŒã¹ãããŸããã€ãŸããSequoiaã¯ããã¹ãŠã®ãŠãŒã¶ãŒã«ãšã£ãŠGnuPGã®ãããªããŒã«ã«ä»£ãããã®ã§ã¯ãããŸãããæåã®ã¡ãžã£ãŒãªãªãŒã¹ã¯éçºè ã©ã€ãã©ãªã«çŠç¹ãåãããŸãã Sequoiaéçºè
sq
ã¯ãããŒãžã§ã³1.0ã«å«ãŸããªãã³ãã³ãã©ã€ã³ããŒã«ãå®æãããå¿
èŠããããŸããããã«ãããŒã¹ãã¬ãŒãžãµãŒãã¹ã¯ãŸã éçºäžã§ããã³ãã³ãã©ã€ã³ããŒã«ãšãšãã«ãããã¯ããŒãžã§ã³1.0ã®ãªãªãŒã¹åŸã®ãããžã§ã¯ãã®äž»èŠãªåªå
äºé
ã®1ã€ã§ãã
å šäœãšããŠãOpenPGPããã䜿ãããããããã¢ã¯ã»ã¹ããããããããšããŠãããããžã§ã¯ããèŠãã®ã¯çŽ æŽãããããšã§ããéçºè ã¯3幎éã§å€§ããªé²æ©ãéããããšãããããŸããããã¥ã¡ã³ãã§ã¯ããã®ã©ã€ãã©ãªãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ããŸãããã ããSequoiaã¯ãä¿¡é Œæ§ã®é«ãæå·åããŒã«ã«ãªããŸã§ã«ã¯ãŸã é·ãéã®ãããããŸããæãéèŠãªããšã¯ãã³ãŒããç£æ»ããå¿ èŠããããšããããšã§ãããããžã§ã¯ãããŒãžã«ã¯ããŸã ç£æ»ãããŠããªããšèšèŒãããŠããŸããããã¡ã€ã³ã®Sequoiaã¯ã¬ãŒãããªãªãŒã¹ããããšããã«ããµãŒãããŒãã£ã«ããç£æ»ãè¡ãããŸãããããŒãžã§ã³1.0ã®ãªãªãŒã¹æ¥ã¯çºè¡šãããŠããŸãããããŸããªããªãªãŒã¹ãããããã§ãã
åºå
ææ°ã®ããŒããŠã§ã¢ãæ»æä¿è·ãããã³è±å¯ãªçš®é¡ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãåããããã°ã©ããŒåãã®VDSãæ倧æ§æã¯ã128 CPUã³ã¢ã512 GB RAMã4000 GBNVMeã§ãã