Stan Drapkinã¯ã.NET Frameworkã®16幎以äžã®çµéšãæã€ã»ãã¥ãªãã£ããã³ã³ã³ãã©ã€ã¢ã³ã¹ã®å°éå®¶ã§ãïŒ2001幎ã®.NET 1.0-beta以éïŒã æ®å¿µãªããã圌èªèº«ã¯ãã·ã¢èªã§èšäºãæžããŠããªãã®ã§ã
圌ã®ã¬ããŒãã®ç¿»èš³
ãDotNext Piterã§ãªãªãŒã¹ããããšã«åæããŸããã ãã®ã¬ããŒãã¯äŒè°ã§
1äœã«ãªããŸããïŒ
察称æå·åãé察称ããã€ããªãããé«ã¬ãã«ãäœã¬ãã«ãã¹ããªãŒã ããã³ææ°ã®æ¥åæå·ã æå·åã«é¢ãããããªã®56åãããã³ã¯ããã«é«é-ããã¹ãã®åœ¢åŒã§ã

ã«ããã®äž-ãããªãã¹ã©ã€ãã翻蚳ã èªæžããæ¥œãã¿ãã ããïŒ
ã¹ã©ã€ãç§ã®ååã¯ã¹ã¿ã³ã»ãã©ããã³ã§ããç§ã¯æ
å ±ã»ãã¥ãªãã£ãšèŠå¶é å®ãå°éãšããäŒç€Ÿã®ãã¯ãã«ã«ãã£ã¬ã¯ã¿ãŒã§ãã ããã«ãç§ã¯ããã€ãã®ãªãŒãã³ãœãŒã¹ã©ã€ãã©ãªã®äœæè
ã§ãããããããã¯ã³ãã¥ããã£ããéåžžã«å¥œè©ã§ãã
ã€ã³ãã§ã«ããèãã人ã¯äœäººã§ããïŒ ãã®ã©ã€ãã©ãªã¯ã.NETã§ã®æå·åãžã®æ£ããã¢ãããŒãã瀺ããŠããã
TinyORMã¯.NETã®micro-ORMãå®è£
ããŠããŸãã ããã«ã仿¥ã®èšäºã®ãããã¯ã«é¢é£ããå¯èœæ§ã®ããæ¬ãããã€ãæžããŠããŸãã ãã®1ã€ã§ãã2014幎çã¯ãSecurity Driven .NETãã§ããã2017幎ã®ãã1ã€ã¯ãApplication Security in .NETãSuccinctlyãã§ãã
æåã«ãæå·ååçºã®4ã€ã®æ®µéãšåŒã¶ãã®ã«ã€ããŠèª¬æããŸãã æ¬¡ã«ã2ã€ã®äž»èŠãªãããã¯ãç¶ããŸããæåã®ãããã¯ã§ã¯å¯Ÿç§°æå·åã«ã€ããŠã2çªç®ã®ãããã¯ã§ã¯é察称ããã³ãã€ããªããã«ã€ããŠèª¬æããŸãã æåã®éšåã§ã¯ãé«ã¬ãã«æå·ãšäœã¬ãã«æå·ãæ¯èŒããã¹ããªãŒãã³ã°æå·ã®äŸãèŠãŠã¿ãŸãããã 第2éšã§ã¯ãRSAã§å€ãã®ãåéºããè¡ãããã®åŸãçŸä»£ã®æ¥åæå·ã«ç²ŸéããŸãã
ã§ã¯ãæå·ååçºã®ãããã®æ®µéã¯ã©ã®ããã«èŠããã®ã§ããããïŒ æåã®æ®µéã¯ããXORã¯ãšãŠãã¯ãŒã«ã ãèŠãŠããæ¯ãããã©ãããã°ãããïŒãã§ããããªãã®å€ãã¯ãã£ãšãã®æ®µéã«ç²ŸéããŠãããXORæ©èœã®çŽ æŽããããç¥ã£ãŠããŸãã ãããããã®æ®µéã®å€§éšåãæé·ããæ¬¡ã®æ®µéãã€ãŸãåºãç¥ãããé«ãè©äŸ¡ãããŠããã¢ã«ãŽãªãºã ã§ããAESïŒAdvanced Encryption StandardïŒã䜿çšããŠæå·åãšåŸ©å·åãå®è¡ããããšãåŠãã ããšãé¡ã£ãŠããŸãã DotNextã«ã¢ã¯ã»ã¹ããªãã»ãšãã©ã®éçºè
ã¯ãã®æ®µéã§ãã ããããDotNextã«åŸããäœã¬ãã«APIã®å±éºæ§ã«é¢ããã¬ããŒãã«ç²ŸéããŠãããããæ¬¡ã®æ®µéã«ããå¯èœæ§ãé«ãã§ãããã ãŸããå
šäœåã宿ãããããã«ãæåŸã®æ®µéã«ãèšåããŸã-åé¡ã«å¯Ÿããæåã®è§£æ±ºçã§ã¯ãæå·åã¯ãŸã£ããå¿
èŠãªããããããªããšããçè§£ã§ãã ãã®æ®µéã¯å°éããã®ãæãé£ããã人ãã»ãšãã©ããŸããã ããšãã°ãããŒã¿ãŒG.ãã€ãã³ã¯æ¬¡ã®ããã«èªã£ãŠããŸãããåé¡ã®è§£æ±ºçãæå·åã«ãããšèããŠããå Žåãåé¡ã®å
å®¹ãæ£ç¢ºã«çè§£ããããšã¯ã§ããŸãããã
äœã¬ãã«æå·åãå±éºã§ãããšããäºå®ã¯ã.NETã«é¢ããå€ãã®ã¬ããŒãã§è°è«ãããŠããŸãã 2015幎ã®Vladimir Kochetkovã®ã¬ããŒã
ãPitfalls of System.Security.Cryptographyããåç
§ã§ã
ãŸã ã 圌ã®äž»ãªã¢ã€ãã¢ã¯ãäœã¬ãã«ã®æå·åAPIã䜿çšããåæ®µéã§ãç¥ããªããã¡ã«å€ãã®æ±ºå®ãäžãããšã§ããããã®å€ãã«ã€ããŠã¯é©åãªç¥èããããŸããã äž»ãªçµè«ã¯ãçæ³çã«ã¯ãäœã¬ãã«æå·åã®ä»£ããã«é«ã¬ãã«æå·åã䜿çšããå¿
èŠããããšããããšã§ãã ããã¯çŽ æŽãããçµè«ã§ãããå¥ã®åé¡ã«ã€ãªãããŸã-é«ã¬ãã«ã®æå·åãã©ã®ããã«èŠããã¹ãããæ£ç¢ºã«ç¥ã£ãŠããŸããïŒ ããã«ã€ããŠå°ã話ããŸãããã
éé«ã¬ãã«æå·åAPIã®å±æ§ãå®çŸ©ããŸãã ããããããã®ãããªAPIã¯.NETã«ãã€ãã£ãã§ãããšããå°è±¡ãäžããã®ã§ã¯ãªããäœã¬ãã«ã®ã·ã§ã«ã®ããã«èŠããŸãã ããã«ããã®ãããªAPIã¯ç°¡åã«èª€ã£ãŠäœ¿çšãããŸãã ããã§ã¯ãããŸããã ããã«ããã³ã¹ãåæåãã¯ãã«ãªã©ãå€ãã®å¥åŠãªäœã¬ãã«ã®ãã®ãçæããããšã匷å¶ããŸãã ãã®ãããªAPIã䜿çšãããšãã¢ã«ãŽãªãºã ãããã£ã³ã°ã¢ãŒããããŒãµã€ãºããã³ã¹ãªã©ãéžæããã®ã§ã¯ãªããäžå¿«ãªå€æãäžãããšã«ãªããŸãã ãŸããã¹ããªãŒãã³ã°çšã®æ£ããAPIïŒã¹ããªãŒãã³ã°APIïŒããããŸãããåŸè
ã®å€èгã«ã€ããŠèª¬æããŸãã
察ç
§çã«ãé«ã¬ãã«ã®æå·åAPIã¯ã©ã®ããã«èŠããã¹ãã§ããïŒ ãããããã³ãŒãã®èªã¿åããšæžã蟌ã¿ã®äž¡æ¹ã«ã€ããŠãçŽæçãã€ç°¡æœã§ãªããã°ãªããŸããã ããã«ããã®ãããªAPIã¯ç°¡åã«ç¿åŸããŠäœ¿çšã§ããééã£ãæ¹æ³ã§é©çšããããšã¯éåžžã«é£ããã¯ãã§ãã ãŸãã匷åã§ããå¿
èŠããããŸããã€ãŸããå°ãã®åŽåãšå°éã®ã³ãŒãã§ç®æšãéæã§ããå¿
èŠããããŸãã æåŸã«ããã®ãããªAPIã«ã¯äžè¬ã«å¶éãèŠåãç¹æ®ãªã±ãŒã¹ã®é·ããªã¹ããå«ããã¹ãã§ã¯ãããŸãã-ãããæäœããéã«èŠããŠããå¿
èŠã®ããæå°éã®ãã®ãããã¯ãã§ã-èšãæããã°ãäœã¬ãã«ã®å¹²æžïŒäœæ©æŠïŒã«ãã£ãŠç¹åŸŽä»ããããã¹ãã§ãäºçŽãªãã§åäœããŸãã
.NETã®é«ã¬ãã«æå·åAPIã®èŠä»¶ãçè§£ããã®ã§ãä»ã©ã®ããã«ãããèŠã€ããã®ã§ããããïŒ ããªãã¯ãã ã°ãŒã°ã«ã詊ãããšãã§ããŸãããããã¯ããŸãã«ãåå§çã§ã-ç§ãã¡ã¯ããã®éçºè
ã§ãããããã¯ç§ãã¡ã®æ¹æ³ã§ã¯ãããŸããã ãã®ããããã®åé¡ã調æ»ããããŸããŸãªéžæè¢ããã¹ãããŠããŸãã ãã ãããã®ããã«ã¯ããŸããèªèšŒãããæå·åãšã¯äœããšããæ£ããèããèªåèªèº«ã§è£ãå¿
èŠãããããã®ããã«ã¯åºæ¬çãªæŠå¿µãçè§£ããå¿
èŠããããŸãã ãããã¯æ¬¡ã®ãšããã§ãããã¬ãŒã³ããã¹ãPïŒãã¬ãŒã³ããã¹ãïŒãããã¯ãç§å¯ããŒKïŒããŒïŒã䜿çšããŠåãé·ãã®æå·ããã¹ãCïŒæå·ããã¹ãïŒã«å€æããŸãã ã芧ã®ãšããããããŸã§ã®ãšãããéåžžã«åçŽãªã¹ããŒã ã䜿çšããŠããŸãã ããã«ãèªèšŒã¿ã°Tãšnonce NããããŸããéèŠãªãã©ã¡ãŒã¿ãŒã¯NÌ
ã§ããã€ãŸãã1ã€ã®ããŒã§nonceãåå©çšããŸãã ãããããåç¥ã®ããã«ãããã¯ããã¹ãã®æ©å¯æ§ã®äŸµå®³ã«ã€ãªãããŸãããããã¯æããã«æãŸãããããŸããã ãã1ã€ã®éèŠãªæŠå¿µã¯ADïŒé¢é£ããŒã¿ïŒãã€ãŸãé¢é£ããŒã¿ã§ãã ããã¯èªèšŒããããªãã·ã§ã³ã®ããŒã¿ã§ãããæå·åãšåŸ©å·åã«ã¯é¢äžããŸããã

åºæ¬æŠå¿µãçè§£ããã®ã§ã.NETã®æå·åã©ã€ãã©ãªã®ããŸããŸãªãªãã·ã§ã³ãèŠãŠã¿ãŸãããã
Libsodium.NETãåæããããšããå§ããŸããã
ã 圌女ãäœäººç¥ã£ãŠããŸããïŒ ç§ãèŠãããã«ãããã€ãã¯ããªãã¿ã§ãã
nonce = SecretAeadAes.GenerateNonce(); c = SecretAeadAes.Encrypt(p, nonce, key, ad); d = SecretAeadAes.Decrypt(c, nonce, key, ad);
æå·åã
Libsodium.NETã§å®è¡ãããCïŒã³ãŒãã¯
次ã®ãšããã§ãã äžèŠãããšãããã¯éåžžã«ã·ã³ãã«ã§ç°¡æœã§ãã1è¡ç®ã§ã¯ãã³ã¹ãçæããã2è¡ç®ã§ã¯æå·åèªäœãè¡ããã3è¡ç®ã§ã¯ããã¹ãã埩å·åãããŸãã ããã¯æããã-ã©ã®ãããªå°é£ãããå¯èœæ§ããããŸããïŒ ãããããLibsodium.NETã¯å¯Ÿç§°æå·åã®1ã€ã§ã¯ãªã3ã€ã®ç°ãªãæ¹æ³ãæäŸããŸãïŒ
å
nonce = SecretAeadAes.GenerateNonce(); c = SecretAeadAes.Encrypt(p, nonce, key, ad); d = SecretAeadAes.Decrypt(c, nonce, key, ad);
äº
nonce = SecretAead.GenerateNonce(); c = SecretAead.Encrypt(p, nonce, key, ad); d = SecretAead.Decrypt(c, nonce, key. ad);
äž
nonce = SecretBox.GenerateNonce(); c = SecretBox.Create(p, nonce, key); d = SecretBox.Open(c, nonce, key);
æããã«ãåé¡ãçºçããŸã-ããªãã®ç¹å®ã®ç¶æ³ã§ã©ã¡ããè¯ãã§ããïŒ ããã«çããã«ã¯ããããã®ã¡ãœããã®å
éšã«å
¥ãå¿
èŠããããŸãã
æåã®ã¡ãœãã
SecretAeadAes
ã¯ã96ãããã®ãã³ã¹ã§AES-GCMã䜿çšããŸãã 圌ãããªãé·ãå¶éãªã¹ããæã£ãŠããããšãéèŠã§ãã ããšãã°ãããã䜿çšããå Žåã1ã€ã®ããŒã§550ã®ã¬ãã€ããè¶
ããŠæå·åããã¹ãã§ã¯ãããŸããããŸãã1ã€ã®ã¡ãã»ãŒãžã§æå€§2
32ã®ã¡ãã»ãŒãžãå«ã64ã®ã¬ãã€ããè¶
ããŠã¯ãªããŸããã ããã«ãã©ã€ãã©ãªã¯ãããã®å¶éã«è¿ã¥ããŠããããšãèŠåããŠããŸãããããªãã¯ããããèªåã§è¿œè·¡ããå¿
èŠããããéçºè
ãšããŠããªãã«è¿œå ã®è² æ
ããããŸãã
2çªç®ã®æ¹æ³ã§ãã
SecretAead
ã¯ãç°ãªãæå·ã¹ã€ãŒã
ChaCha20/Poly1305
ãã倧å¹
ã«å°ãã64ãããã®ãã³ã¹ã䜿çšããŸãã ãã®ãããªå°ããªãã³ã¹ã¯è¡çªã極ããŠå¯èœæ§ãé«ãããããã®çç±ã ãã§ããã®æ¹æ³ã¯äœ¿çšããªãã§ãã ãã-éåžžã«ãŸããªã±ãŒã¹ãé€ãããããã¯ã«ç²ŸéããŠããå Žåãé€ããŸãã
æåŸã«ã3çªç®ã®ã¡ãœãã
SecretBox
ã ãã®APIã®åŒæ°ã«ã¯é¢é£ããããŒã¿ããªãããšã«æ³šæããŠãã ããã ADã§èªèšŒãããæå·åãå¿
èŠãªå Žåããã®æ¹æ³ã¯é©ããŠããŸããã ããã§äœ¿çšãããæå·åã¢ã«ãŽãªãºã ã¯
xSalsa20/Poly1305
ãšåŒã°ãããã³ã¹ã¯ååã«å€§ãã
xSalsa20/Poly1305
ãããã§ãã ãã ããADã®æ¬ åŠã¯é倧ãªå¶éã§ãã
Libsodium.NETã䜿çš
ãããš ãããã€ãã®çåãçããŸãã ããšãã°ãäžèšã®äŸã®ã³ãŒãã®æåã®è¡ã§çæããããã³ã¹ã䜿çšããŠãæ£ç¢ºã«äœããã¹ãã§ããããïŒ ã©ã€ãã©ãªã¯ããã«ã€ããŠäœãæããŠãããŸãããç§ãã¡ã¯èªåã§ãããçè§£ããªããã°ãªããŸããã ã»ãšãã©ã®å Žåããã®ãã³ã¹ãæå·æã®æåãŸãã¯æåŸã«æåã§è¿œå ããŸãã ããã«ãæåã®2ã€ã®æ¹æ³ã®ADã®é·ãã«ã¯å¶éããªããšããå°è±¡ãåãããããããŸããã ããããå®éã«ã¯ãã©ã€ãã©ãªã¯16ãã€ã以äžã®ADããµããŒãããŠããŸããçµå±ã®ãšããã16ãã€ãã§ååã§ãã ç¶ããŸãããã 埩å·åãšã©ãŒã¯ã©ããªããŸããïŒ ãã®ã©ã€ãã©ãªã§ã¯ããããã®å Žåã«äŸå€ãã¹ããŒããããšã決å®ãããŸããã 埩å·åäžã®ç°å¢ã§ããŒã¿ã®æŽåæ§ã䟵害ãããå¯èœæ§ãããå Žåãå€ãã®äŸå€ãåŠçããå¿
èŠããããŸãã ããŒãµã€ãºãæ£ç¢ºã«32ãã€ãã§ã¯ãªãå Žåã¯ã©ããªããŸããïŒ ã©ã€ãã©ãªã¯ããã«ã€ããŠã¯äœãæããŠãããŸããããããã¯ããªããèå³ãæããªãåé¡ã§ãã å¥ã®éèŠãªãããã¯ã¯ãéäžçãªã·ããªãªã§ã¬ããŒãžã³ã¬ã¯ã¿ãŒã®è² è·ã軜æžããããã®ãã€ãé
åã®åå©çšã§ãã ããšãã°ãã³ãŒãã§ã¯ãnonceãžã§ãã¬ãŒã¿ãŒãè¿ãé
åã確èªããŸããã æ¯åæ°ãããããã¡ãäœæããã®ã§ã¯ãªããæ¢åã®ãããã¡ãåå©çšããããšæããŸãã ããã¯ãã®ã©ã€ãã©ãªã§ã¯äžå¯èœã§ããããã€ãã®é
åã¯æ¯ååçæãããŸãã
ãã§ã«èŠãã¹ããŒã ã䜿çšããŠãããŸããŸãª
Libsodium.NETã¢ã«ãŽãªãºã ã®æ¯èŒã詊ã¿ãŸãã

æåã®ã¢ã«ãŽãªãºã ã§ããAES-GCMã¯ã96ãããé·ã®ãã³ã¹ã䜿çšããŸãïŒå³ã®é»è²ã®åïŒã 128ãããæªæºã§ãããããå€å°ã®äžå¿«æãçããŸãããããã»ã©éèŠã§ã¯ãããŸããã æ¬¡ã®åã¯éã§ããããã¯èªèšŒã¿ã°ãå ããå Žæã§ãAES-GCMã§ã¯16ãã€ããŸãã¯128ãããã§ãã æ¬åŒ§å
ã®2çªç®ã®éãæ°åã¯ããã®ã¿ã°ã«å«ãŸãããšã³ããããŒãŸãã¯ã©ã³ãã æ§ã®éãæå³ããŸã-128ãããæªæºã ã©ãã ãå°ãªã-ãã®ã¢ã«ãŽãªãºã ã§ã¯ãæå·åãããããŒã¿ã®éã«äŸåããŸãã æå·åããã»ã©ãã¿ã°ã¯åŒ±ããªããŸãã ããã ãã§ãããã®ã¢ã«ãŽãªãºã ã«é¢ããçåãçããã¯ãã§ãããçœãåãèŠããšå¢å ããŸãã ãã³ã¹ã®ç¹°ãè¿ãïŒè¡çªïŒã¯ãåãããŒã§äœæããããã¹ãŠã®æå·æã®åœé ã«ã€ãªãããšèšãããŠããŸãã ããšãã°ã2ã€ã®å
±éããŒã«ãã£ãŠäœæããã100åã®æå·ããã¹ãã®ãã¡ããã³ã¹ã®è¡çªãããå Žåããã®ãã³ã¹ã¯èªèšŒããŒã®å
éšãªãŒã¯ãåŒãèµ·ãããæ»æè
ããã®ããŒã«ãã£ãŠäœæãããä»ã®æå·ããã¹ããåœé ã§ããããã«ããŸãã ããã¯éåžžã«éèŠãªå¶éã§ãã
2çªç®ã®
Libsodium.NETã¡ãœããã«
é²ã¿ãŸãããã å
ã»ã©èšã£ãããã«ãããã§ã¯äžåã ãã䜿çšãããã¹ããŒã¹ãå°ãªãããŠ64ããããããããŸããã ã¿ã°ã¯128ããããå æããŸããããšã³ããããŒã¯106ããã以äžãã€ãŸããã»ãšãã©ã®å Žåéæããããšãã128ãããã®ã»ãã¥ãªãã£ã¬ãã«ããã倧å¹
ã«äœãã§ãã åœé ã«é¢ããŠã¯ãããã§ã®ç¶æ³ã¯AES-GCMã®å Žåãããè¥å¹²è¯ããªã£ãŠããŸãã ãã³ã¹ã®è¡çªã¯æå·æã®æ¹ããã«ã€ãªãããŸãããè¡çªãçºçãããããã¯ã®ã¿ã§ãã åã®äŸã§ã¯ã100ã§ã¯ãªã2ã€ã®æå·æãåœé ããŠããŸããã
æåŸã«ãxSalsa / Polyã¢ã«ãŽãªãºã ã®å Žåã192ãããã®éåžžã«å€§ããªãã³ã¹ããããè¡çªãéåžžã«èµ·ããã«ãããªããŸãã èªèšŒæ¹æ³ã¯åã®æ¹æ³ãšåãã§ãããããã¿ã°ã¯åã³128ãããã䜿çšãã106ããã以äžã®ãšã³ããããŒãæã¡ãŸãã
ãããã®ãã¹ãŠã®æ°å€ãã
Infernoã©ã€ãã©ãªã®å¯Ÿå¿ããã€ã³ãžã±ãŒã¿ãŒãšæ¯èŒããŸãã ãã®äžã§ããã³ã¹ã¯ã320ãããã®å·šå€§ãªã¹ããŒã¹ãå æããè¡çªãã»ãšãã©äžå¯èœã«ããŸãã ã¿ã°ã«ã€ããŠã¯ããã¹ãŠãã·ã³ãã«ã§ããæ£ç¢ºã«128ããããå æããæ£ç¢ºã«128ãããã®ãšã³ããããŒãæã£ãŠããŸãã ããã¯ãä¿¡é Œæ§ãé«ãå®å
šãªã¢ãããŒãã®äŸã§ãã
Libsodium.NETã®è©³çްãç¥ãåã«ããã®ç®çãçè§£ããå¿
èŠããããŸã-æ®å¿µãªããããã®ã©ã€ãã©ãªã䜿çšãããã¹ãŠã®äººãèªèããŠããããã§ã¯ãããŸããã ãããè¡ãã«ã¯ã
Libsodium.NETã
libsodiumã®CïŒã©ãããŒã§ãããšè¿°ã¹ãŠããããã¥ã¡ã³ããåç
§ããŠãã ããã ããã¯å¥ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ããããã®ããã¥ã¡ã³ãã«ã¯ãäºææ§ã®ããAPIãåãã
NaClã®ãã©ãŒã¯ã§ããããšãèšèŒãããŠããŸãã ããŠãå¥ã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ãã§ãã
NaClã®ããã¥ã¡ã³ããåç
§ããŠãã ããã ãã®äžã§ãç®æšãšããŠã
NaClã¯é«åºŠãªæå·åããŒã«ãäœæããããã«å¿
èŠãªãã¹ãŠã®æäœãæäŸãã
ãšä»®å®ãããŠããŸãã ç¬ãåè¬ãããã®ã¯ããã§ã
ãNaClãšãã®ãã¹ãŠã®ã·ã§ã«ã®ã¿ã¹ã¯ã¯ãäœã¬ãã«ã®èŠçŽ ãæäŸããããšã§ããããããã誰ãããã§ã«é«ã¬ãã«ã®æå·åAPIãçµã¿ç«ãŠãããšãã§ããŸãã é«ã¬ãã«ã®ã©ã€ãã©ãªãšããŠã®ãããã®ã·ã§ã«èªäœã¯èæ¡ãããŠããŸããã ãããã£ãŠãã¢ã©ã«ïŒé«ã¬ãã«ã®æå·åAPIãå¿
èŠãªå Žåãé«ã¬ãã«ã®ã©ã€ãã©ãªãèŠã€ããäœã¬ãã«ã®ã©ãããŒã䜿çšãããé«ã¬ãã«ã®ã©ã€ãã©ãªã§äœæ¥ããŠãããµããããå¿
èŠããããŸãã
Infernoã§ã®æå·åã®ä»çµã¿ãèŠãŠã¿ãŸãããã
Libsodiumã®å Žåã®
ããã« ãåæå·åãšåŸ©å·åã«å¿
èŠãªã³ãŒãã¯1è¡ã®ã¿ã§ãã åŒæ°ã¯ãããŒãããã¹ããããã³ãªãã·ã§ã³ã®é¢é£ããŒã¿ã§ãã ãã³ã¹ããªããæ±ºå®ãè¡ãå¿
èŠããªãããšã«æ³šæããå¿
èŠããããŸãã埩å·åãšã©ãŒã®å ŽåãäŸå€ãã¹ããŒããã«nullãè¿ãããã ãã§ãã äŸå€ãäœæãããšãã¬ããŒãžã³ã¬ã¯ã¿ã®è² è·ã倧å¹
ã«å¢å ãããããäŸå€ãååšããªãããšã¯ã倧ããªããŒã¿ã¹ããªãŒã ãåŠçããã¹ã¯ãªããã«ãšã£ãŠéåžžã«éèŠã§ãã ãã®ã¢ãããŒããæé©ã§ãããšçŽåŸã§ããããšãé¡ã£ãŠããŸãã
è峿·±ãããšã«ãæååãæå·åããŠã¿ãŸãããã ããã¯ã誰ã§ãå®è£
ã§ããæãåçŽãªã·ããªãªã§ãªããã°ãªããŸããã ãLEFTããšãRIGHTãã®2ã€ã®ç°ãªãæååå€ãã䜿çšã§ããªããšããŸãã

åçã§ã¯ã
Infernoã䜿çšãããããã®è¡ã®æå·åã確èªã§ããŸãïŒãã ãããã®äŸã§ã¯ã䜿çšããã©ã€ãã©ãªã¯é¢ä¿ãããŸããïŒã 1ã€ã®ããŒã§2è¡ãæå·åãã2ã€ã®æå·æ
c1
ãš
c2
ãååŸããŸãã ãã®ã³ãŒãã®ãã¹ãŠãæ£ããã§ããïŒ åœŒã¯çç£ã®æºåãã§ããŠããŸããïŒ èª°ããåé¡ã¯çæéã§å¯èœã ãšèšããããããŸããããããã¯äž»èŠãªåé¡ããã¯ã»ã©é ãã®ã§ãããŒã¯åãããã«äœ¿çšãããååãªé·ãããããšä»®å®ããŸãã
c1
ãåŸæ¥ã®æå·åã¢ãããŒãã§ã¯ããã®äŸã®
c1
ã¯
c2
ãããçããªããŸãã ããã¯é·ããªãŒã¯ãšåŒã°ããŸããå€ãã®å Žåã
c2
ã¯
c1
ãã1ãã€ãé·ããªããŸãã ããã«ãããæ»æè
ã¯ããã®æå·åããã¹ããLEFTããŸãã¯ãRIGHTãã§è¡šãããæååãçè§£ã§ããŸãã ãã®åé¡ã解決ããæãç°¡åãªæ¹æ³ã¯ãäž¡æ¹ã®è¡ã®é·ããåãã«ããããšã§ããããšãã°ãLEFTè¡ã®æåŸã«æåã远å ããŸãã
äžèŠãããšãããé·ãã®æŒãã¯ãå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯çºçãåŸãªãããã倧ãããªåé¡ãšããŠèªèãããŠããŸãã ãããã2018幎1æã«ããTinderã«æå·åããªããããç»é¢ãã¹ã¯ã€ããããšãã«éšå€è
ã远跡ã§ããããšããèŠåºãã®äžã§ãã€ã¹ã©ãšã«ã®äŒç€ŸCheckmarxã宿œãã調æ»ã«ããèšäºãWiredèªã«æ²èŒãããŸããã ã³ã³ãã³ãã«ã€ããŠç°¡åã«èª¬æããŸãããæåã«Tinderæ©èœã®å€§ãŸããªèª¬æãããŸãã Tinderã¯ãåçä»ãã®ã¹ããªãŒã ãåä¿¡ããåçã奜ããã©ããã«å¿ããŠãç»é¢ãå³ãŸãã¯å·Šã«ã¹ã¯ã€ãããã¢ããªã±ãŒã·ã§ã³ã§ãã ç ç©¶è
ã¯ãã³ãã³ãèªäœã¯TLSãšHTTPSã䜿çšããŠæ£ããæå·åãããŠããŸãããå³åŽã®ã³ãã³ãã®ããŒã¿ã¯å·ŠåŽã®ããŒã¿ãšã¯ç°ãªããã€ãæ°ãå¿
èŠãšããããšãçºèŠããŸããã ããã¯ãã¡ããè匱æ§ã§ãããããèªäœã¯ããã»ã©éèŠã§ã¯ãããŸããã Tinderã«ãšã£ãŠããéèŠãªã®ã¯ãæå·åãªãã§ãéåžžã®HTTPçµç±ã§åçä»ãã®ã¹ããªãŒã ãéä¿¡ãããšããäºå®ã§ãã ãã®ãããæ»æè
ã¯åçã«å¯ŸãããŠãŒã¶ãŒã®åå¿ã ãã§ãªããåçèªäœã«ãã¢ã¯ã»ã¹ããå¯èœæ§ããããŸãã ãããã£ãŠãã芧ã®ãšãããé·ãã®ãªãŒã¯ã¯éåžžã«çŸå®çãªåé¡ã§ãã
次ã«ããã¡ã€ã«ãæå·åããŠã¿ãŸãããã ããã«ã
Libsodium.NETãã¡ã€ã«æå·åããŸãã¯ãã£ãšåºãèšãã°ãã¹ããªãŒã æå·åã¯ããã©ã«ãã§ã¯å®è£
ãããŠããããæåã§è¡ããªããã°ãªããªãããšãèšããªããã°ãªããŸããã
Infernoã®æ¹ãã¯ããã«åªããŠããŸãã

äžèšã®äŸã¯ãMSDNããã»ãšãã©å€æŽãå ããã«æ®åœ±ããäŸã§ãã ããã¯éåžžã«ç°¡åã§ããããã§ã¯ããœãŒã¹ãã¡ã€ã«çšã®ã¹ããªãŒã ãšå®å
ãã¡ã€ã«çšã®ã¹ããªãŒã ã®ã»ããæåã®ã¹ããªãŒã ã2çªç®ã«å€æããæå·åã¹ããªãŒã ããããŸãã ãã®ã³ãŒãã§ã¯ã
Inferno㯠1è¡ã§ã®ã¿äœ¿çšãããŸã-倿ãè¡ãããè¡ã§ã ã§ããããç§ãã¡ã®åã«ããã®ã¯ãã¹ããªãŒã ãæå·åããããã®ã·ã³ãã«ãã€åæã«å®å
šã«æ©èœãããã¹ãããããœãªã¥ãŒã·ã§ã³ã§ãã
åãããŒã§æå·åããå Žåãã¡ãã»ãŒãžæ°ã«å¶éãããããšã«æ³šæããŠãã ããã ãããã¯
Infernoã«ååšãããã®ã©ã€ãã©ãªã§ã¯ç»é¢äžã«æç¢ºã«æžãããŠããŸãã ããããåæã«ããããã¯
ã€ã³ãã§ã«ãã§ã¯éåžžã«å€§ãããããå®éã«ã¯å°éããããšã¯ãããŸããã
Libsodium.NETã§ã¯ãå¶éã¯ã¢ã«ãŽãªãºã ããšã«ç°ãªããŸããããã¹ãŠã®å Žåã«ãããŠããããè¶
ããã«ã¯ååã«äœãã§ãã ãããã£ãŠãåã
ã®ã·ããªãªã§ããããéæããããã©ããã確èªããå¿
èŠããããŸãã
ãŸããé¢é£ããããŒã¿ã®èªèšŒã«ã€ããŠã説æããå¿
èŠããããŸããããã¯ãããŸãåãäžããããªããããã¯ã§ããããã§ãã ADã¯ã匱ããå¯èœæ§ããããŸããããã¯ãèªèšŒãããŠããããšãæå³ããŸãããæå·åããã³åŸ©å·åããã»ã¹èªäœã«ã¯é¢äžããŠããŸããã 察ç
§çã«ãã匷åãªãADã¯ãã®ããã»ã¹èªäœã倿ŽããŸãã ç§ãç¥ã£ãŠããã»ãšãã©ã®ADã©ã€ãã©ãªã¯è匱ã§ããã
Infernoã¯æå·å/埩å·åããã»ã¹èªäœã§ADã䜿çšããã2çªç®ã®ã¢ãããŒãã䜿çšããŠããŸã...
ãŸããé«ã¬ãã«ã®æå·åã®ããã«ã©ã®ã¬ãã«ã®ã»ãã¥ãªãã£ãåªåãã¹ããã«ã€ããŠãæ€èšããå¿
èŠããããŸãã èŠããã«ãç§ã®çãã¯æ¬¡ã®ãšããã§ãã128ãããèªèšŒã¿ã°ã䜿çšãã256ãããæå·åã ããŒããããªã«å€§ããã®ã¯ãªãã§ããïŒ ããã«ã¯å€ãã®çç±ããããŸããããããããéèŠã§ãããæå·ããŒãçæããéã«ãã€ã¢ã¹ãã身ãå®ãå¿
èŠããããšããããšãèŠããŠãããŠãã ããã ãã€ã¢ã¹ã®æå³ã説æããŸãããã ãã€ã¢ã¹ã®ãªãã©ã³ãã ããããžã§ãã¬ãŒã¿ãŒã®å Žåãåãããã«ã€ããŠãå€0ãŸãã¯1ãåãå
¥ãã確çã¯çãããªããŸãã ãããããžã§ãã¬ãŒã¿ã§ããããã50ïŒ
ã§ã¯ãªã56ïŒ
ã®ç¢ºçã§å€1ãåããšä»®å®ããŸãã äžèŠãããšããããã®ãã€ã¢ã¹ã¯å°ããã§ãããå®éã«ã¯25ïŒ
ãšãã倧ããªãã®ã§ãã ããã§ããžã§ãã¬ãŒã¿ãŒã§ç¹å®ã®ãããæ°ãçæãããšãã«åŸããããšã³ããããŒã®éãèšç®ããŠã¿ãŸãããã

åçã«ã¯ããã®èšç®ãè¡ãããåŒã衚瀺ãããŸãã éèŠãªã®ã¯ã倿°ã2ã€ãããªãããšã§ãããã§ã«èª¬æãããã€ã¢ã¹ïŒãã€ã¢ã¹ïŒãšããžã§ãã¬ãŒã¿ãŒã«ãã£ãŠäœæããããããæ°ã§ãã ãã€ã¢ã¹ã¯25ïŒ
ã§ãããšä»®å®ããŸã-ããã¯éåžžã«æ¥µç«¯ãªã±ãŒã¹ã§ãããå®éã«ã¯ããã®ãããªæªãã ä¹±æ°ãžã§ãã¬ãŒã¿ãŒãåããã·ã¹ãã ã§ã¯åäœããªãå¯èœæ§ããããŸãã 25ïŒ
ã®ãã€ã¢ã¹ãš128ãããã®ããŒã䜿çšãããšã53ãããã®ãšã³ããããŒããåŸãããªãå¯èœæ§ããããŸãã 第äžã«ãããã¯éåžžä¹±æ°çºçåšããæåŸ
ããã128ãããããã倧å¹
ã«å°ããã第äºã«ãçŸä»£ã®æè¡ã§ã¯ããã®ãããªããŒã¯åçŽã«ãã«ãŒããã©ãŒã¹ã«ãªããŸãã ãã ãã128ãããããŒã®ä»£ããã«256ãããã䜿çšãããšã106ãããã®ãšã³ããããŒãåŸãããŸãã äºæ³ããã256ãããå°ãªããã®ã®ãããã¯æ¢ã«éåžžã«åªããŠããŸããææ°ã®æè¡ã§ã¯ããã®ãããªããŒãè§£èªããããšã¯ã»ãšãã©äžå¯èœã§ãã
ã¬ããŒãã®æåã®éšåã®æåŸã«ãäžéçµæãèŠçŽããŸãã 誰ããé©åã«äœæãããæå·åAPIã䜿çšããããšããå§ãããŸãã èªåã«åã£ããã®ãèŠã€ããããMicrosoftã«è«é¡æžãéããããªãã«æçŽãæžããŠãã ããã ããã«ãAPIãéžæãããšãã¯ãã¹ã¬ãããæäœããããã®ãµããŒãã®å¯çšæ§ã«æ³šæããå¿
èŠããããŸãã ãã§ã«èª¬æããçç±ã«ãããæå°ããŒé·ã¯256ãããã§ããå¿
èŠããããŸãã æåŸã«ãé«ã¬ãã«æå·åã¯ãä»ã®ãã®ãšåæ§ã«çæ³çã§ã¯ãªãããšãå¿ã«çããŠããå¿
èŠããããŸãã ãªãŒã¯ãçºçããå¯èœæ§ããããã»ãšãã©ã®ã·ããªãªã§ãã®æ©èœã念é ã«çœ®ããŠããå¿
èŠããããŸãã
é察称æå·ããŸãã¯ãã€ããªããæå·ã«ã€ããŠèª¬æããŸãããã ç§ã¯ããªãã¯ã®è³ªåãæããããŸãïŒ.NETã§RSAã䜿çšã§ããŸããïŒ å€ãã®äººãããããããã«ãæ¥ãã§çããŠã¯ãããŸãã-æåã«ãã®åéã§ããªãã®ç¥èããã¹ãããŸãããã æ¬¡ã®ã¹ã©ã€ãã¯ããã®ãããã¯ã«ãã§ã«ç²ŸéããŠãã人åãã«ç¹å¥ã«èšèšãããŠããŸãã ããããæåã«ãŠã£ãããã£ã¢ãèŠãŠã誰ãããã®ã¢ã«ãŽãªãºã ãé·ãéå¿ãããã䜿çšããªãã£ãå Žåã«åããŠãRSAãäœã§ããããèŠããŠãããŠãã ããã

ä¹±æ°ãžã§ãã¬ãŒã¿ãŒã䜿çšããŠã1ã€ã®ãã©ã€ããŒããš1ã€ã®ãããªãã¯ãå«ãããŒãã¢ãäœæããã¢ãªã¹ããããšããŸãã æ¬¡ã«ãã¢ãªã¹å®ã®ã¡ãã»ãŒãžãæå·åãããããããŸãããããã«ã¡ã¯ãã¢ãªã¹ïŒã圌女ã®å
¬ééµã䜿çšããŠãåœŒã¯æå·æãçæããããã圌女ã«éä¿¡ããŸãã 圌女ã¯èªåã®éµã®ç§å¯éšåã䜿çšããŠãã®æå·æãè§£èªããŸãã
ãã®ã·ããªãªãå®éã«åçŸããŠã¿ãŸãããã

äžèšã§ãããããã«ãRSAã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããã¹ããæå·åããŸãã .NETãããã£ã³ã°ã¢ãŒãã®éžæã匷å¶ããããšã«çŽã¡ã«æ³šæãæã£ãŠãã ããã ãããã¯5ã€ãããŸããããã¹ãŠååã¯ããããŸããã ããããã¹ãŠãé çªã«è©ŠããŠã¿ããšãæåŸã®3ã€ã¯åã«äŸå€ãã¹ããŒããæ©èœããªãããšãããããŸãã æ®ãã®2ã€ã®ãã¡ã®1ã€ã
OaepSHA1
ãŸãã ããã§ãããŒã®ãµã€ãºã¯1ãããããã§ãRSAã«ã¯å°ããããŸãããå®éã«ã¯ãããã³ã°ãããããŒã§ãã ãããã£ãŠãããŒãµã€ãºãæåã§èšå®ããå¿
èŠããããŸãã ããã¥ã¡ã³ããããããŒãµã€ãºãåä¿¡ãŸãã¯èšå®ããç¹å¥ãªããããã£
.KeySize
ãããããšã
.KeySize
ãŸãã

äžèŠãããšãããããã¯ãŸãã«ç§ãã¡ãå¿
èŠãšãããã®ãªã®ã§ã
rsa.KeySize = 3072
æžããŸãã ãããããããŸããªçãã«å°ãããåŸãããŒãµã€ãºãçŸåšäœã«çãããã確èªãããšã1ããããããããããšãããããŸãã éèŠã§ã¯ãããŸãã
WriteLine(rsa.KeySize)
ã¡ãœãããŸãã¯
rsa.ExportParameters(false).Modulus.Length * 8
ã䜿çšããŠãã®ãã©ã¡ãŒã¿ãŒããã§ãã¯ããŸã
rsa.ExportParameters(false).Modulus.Length * 8
åŸè
ã®å ŽåãRSAããŒã®ãããªãã¯ã³ã³ããŒãã³ãããšã¯ã¹ããŒããããŸãã ãã®ããŒã®ã¢ãžã¥ã©ã¹ã¯é
åã§ãããã«8ãæããŠãããåäœã®ãµã€ãºãååŸããŸã-ããã1ãããããã«ãªããŸãã ã芧ã®ãšããããã®ã¢ã«ãŽãªãºã ã¯ãŸã æ¬çªç°å¢ã«éä¿¡ããã«ã¯æ©ãããŸãã
ãã®APIãæ©èœããªãçç±ãçè§£ããã®ã«æéãç¡é§ã«ããã代ããã«ãMicrosoftã.NET 4.6ã§æäŸããå¥ã®RSAå®è£
ãã€ãŸãå®å
šã«æ°ãããã®ã詊ããŠãã ããã
RSACngãšåŒã°ãã
Cngã¯æ¬¡äžä»£æå·åã®ç¥ã§ãã æ¬¡äžä»£ã®ããŒã«ã䜿ããããªã人ã¯ããŸããïŒ ãã£ãšããã§ãã¹ãŠã®åé¡ã«å¯Ÿããéæ³ã®è§£æ±ºçãèŠã€ããã§ãããã

RSACngã®ã€ã³ã¹ã¿ã³ã¹ãèŠæ±ããåã³ããŒãµã€ãºã3ãããããã«èšå®ããåã³
WriteLine(rsa.KeySize)
ããŒãµã€ãºã確èªããŸããããŒãµã€ãºããŸã 1ãããããã«çããããšã確èªããŸãã ããã«ãããŒãçæãããªããžã§ã¯ãã®ã¿ã€ãããªã¯ãšã¹ãããå Žå-æãåºããããã«ãRSACngã®ã€ã³ã¹ã¿ã³ã¹ããªã¯ãšã¹ãããŸãã-RSACryptoServiceProviderã§ããããšãããããŸãã ç§ã¯èªåã®çµ¶ææãããã§å
±æãããã ãã§ãããªããã€ã¯ããœãããªã®ãïŒããšå«ã¶ã ãã§ãã
é·ãèŠçãšèŠçã®åŸãå®éã«ã¯å·¥å Žã§ã¯ãªããã¶ã€ããŒã䜿çšããå¿
èŠãããããšãããããŸãã

ããã§ãããã©ã«ãã®ããŒãµã€ãºã®å€ã¯2048ãããã§ãããããã¯ãã§ã«ã¯ããã«åªããŠããŸãã ããã«è¯ãããš-ããã§ãããããããŒãµã€ãºã3ãããããã«èšå®ããããšãã§ããŸãã 圌ããèšãããã«ãææã¯ã¢ã³ããã¯ãããŸããã
ãããŸã§ã®ãã¹ãŠã®åªåã¯RSAã®äœæã«ã®ã¿è»œæžãããæå·åã¯ãŸã éå§ãããŠããŸãããæåã«çããå¿
èŠããã質åããŸã ãããŸãããŸã第äžã«ãããã©ã«ãã®ããŒãµã€ãºã«ã©ã®çšåºŠãŸã§äŸåã§ããŸããïŒRSAãã¡ã¯ããªã®å®è£
ã¯ã§ãªãŒããŒã©ã€ããããå¯èœæ§ãããmachine.config
ãããç¥ããªããã¡ã«å€æŽãããå ŽåããããŸãïŒããšãã°ãã·ã¹ãã 管çè
ã倿Žããå ŽåããããŸãïŒãããã¯ãããã©ã«ãã®ããŒãµã€ãºã倿Žã§ããããšãæå³ããŸãããããã£ãŠãããã©ã«ãã§æäŸãããå€ãä¿¡é Œããã¹ãã§ã¯ãããŸãããããŒãµã€ãºã¯åžžã«ç¬ç«ããŠèšå®ããå¿
èŠããããŸããæ¬¡ã«ãããã©ã«ãã®RSAããŒã®ãµã€ãºã¯ã©ããããã§ããïŒ.NETã«ã¯2ã€ã®RSAå®è£
ãããã1ã€ã¯ããŒã¹RSACryptoServiceProvider
ããã1ã€ã¯ããŒã¹RSACng
. 1 , . Bitcoin (BCN). , Bitcoin , . hashrate, 2
64 . 2
90 . , â , . , , , , 2
70 ( BCN) , 1- RSA, 2
90 ( BCN) â 2- . â , . , 3 , â 4.
.NET , .

RSA,
RSACryptoServiceProvider
,
RSACng
, 4 . , . , API â , , . , , , , . RSA , . , API .
, RSA , ; - .

, (
data
), , . . ; ? â Microsoft, , . , . . , . , , . . .
, , SHA-1? SHA-1, , - , - (compliance department) , .
OaepSHA1
OaepSHA256
, .

. , , , , .
, , .
int GetMaxDataSizeForEnc(RSAEncryptionPadding pad)
, , . , , . , , RSA, . , Microsoft.
, RSA , . , , , API RSA .NET . , , . , 128- 4- . , -, -. . 256- , â 15360 . RSA . . RSA , , , . ? TLS RSA, . , , , , , . , RSA.
, RSA? . ECDSA (Digital Signature Algorithm, « »), RSA . EC â , Elliptic-Curve («»). securitydriven.net/inferno/#DSA Signatures ECDSA, , , .NET. â ECIES (Integrated Encryption Scheme, « »). RSA, , , . securitydriven.net/inferno/#ECIES example. , â ECDH (Diffie-Hellman key exchange, « -»). . (
forward secrecy ).
securitydriven.net/inferno/#DHM Key Exchange .
. API, , . RSA. , , , , . RSA. , (ECDSA, ECDH, ECIES). , , , , . StackOverflow, : « . ».
, , , .
SecurityDriven.Inferno . « » - (Jean-Philippe Aumasson, Serious Cryptography). . , Application Security in .NET, Succinctly, . .NET. , Slideshare , , .
, . -, , . . .NET â CSRF (Cross-Site Request Forgery, « »), , . â , . , GET. CSRF, HTML «hidden». , cookie-, . POST, . , -, , , -, . . , ASP.NET ASP.NET Core. , CSRF .
, CSRF . , â , , , . . , (injection) , . â , AJAX, â . , , , .

,
â . , , . , .
åºåã®åã DotNext. DotNext 2018 Moscow â 22-23 2018 - « ».
. , , . ! .