Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SHA256の実装を pythonで読むために
Search
Yusuke Egami
March 17, 2018
Technology
770
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SHA256の実装を pythonで読むために
Yusuke Egami
March 17, 2018
More Decks by Yusuke Egami
See All by Yusuke Egami
MasteringBitcoin 第5章トランザクション
egapool
3
520
Bitcoinオフチェーン入門_ビットコインとか勉強会#23
egapool
4
1.3k
Segregate Witness (bitcoin) #blockchainkyoto
egapool
1
290
単方向マイクロペイメントチャネル(ビットコイン)
egapool
0
290
bitcoinトランザクション総復習 #blockchainkyoto
egapool
1
350
Other Decks in Technology
See All in Technology
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
720
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
290
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
3
1.2k
あけおめLINE 傾向とその対策
nasa9084
0
310
Harness Engineering on Rails
joelq
0
420
AIは推し活である。
kurazuuuuuu
1
960
AIに賢く動いてもらうためのコンテキスト〜Snowflake女子会 vol.8
snowwmn0824
0
170
[Kiro Meetup #7] Kiro Crew Dive Deep
konippi
0
280
人にやさしく、AIにやさしく、書き手を選ばないIaCのガードレール再考 / Rethinking IaC Guardrails for Humans and AI Alike
kohbis
3
610
今話題のAI「Jev」って何? 宇宙最速で学ぶ会
minorun365
PRO
32
21k
AI Agent入門〜今更聞けないAgentの話〜
hiromimaganuma
0
110
.NET WebAssemblyで実現するクライアントサイドAI推論:NuGetからViteまで、2つのエコシステムを繋ぐビルド戦略
yamachu
1
690
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Skip the Path - Find Your Career Trail
mkilby
1
240
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
510
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Fireside Chat
paigeccino
43
4k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
340
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
250
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
280
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
580
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
310
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
240
Transcript
SHA256ͷ࣮Λ pythonͰಡΉͨΊʹ ΜͳΓpython#4(20180316) ΤΨϛ Ϣεέ @egapool
SHA256ͷ͓͞Β͍
SHA256ͱ ҉߸ֶతϋογϡؔͷSHA-2γϦʔζͷҰ ͭ SHA-224ɺSHA-256ɺSHA-384ɺSHA-512
ϋογϡؔͱ ͋Δσʔλ͔ΒཁʢࢦͷΑ͏ͳͷʣΛ ಘΔؔ
҉߸ֶతϋογϡؔͱ ϋογϡؔʹҎԼ͕Ճ͞Εͨͷ ɾҰํੑ ɹᵋϋογϡΛ͔ΒݩͷϝοηʔδΛਪଌͰ͖ͳ͍ ɾিಥੑ ɹᵋ ಉ͡ϋογϡΛੜ͢ΔϝοηʔδͷϖΞΛݟ͚ͭΔ͜ ͱ͕ࠔ
SHA256ͷ࣮ͷհ
༷FIPS 180-2Ͱެ։ ΞϝϦΧࠃཱඪ४ٕज़ݚڀॴ (NIST) ͕ൃߦ https://csrc.nist.gov/csrc/media/ publications/fips/180/2/archive/ 2002-08-01/documents/fips180-2.pdf
hashlibϞδϡʔϧ hashlibͰsha256ͷ࣮cpython࣮ͷϞδϡʔϧΛimport͍ͯ͠ Δ [hashlib] https://github.com/python/cpython/blob/3.6/Lib/hashlib.py#L89-L92 [_sha256] https://github.com/python/cpython/blob/3.6/Modules/ sha256module.c
nanvel/sha256.py https://gist.github.com/nanvel/ 9e606cb7271126b1cb2413b7415d560d
SHA256ͷΞϧΰϦζϜ
SHA256࠷ऴతʹ256bit(=32byte)ͷจࣈྻΛు ͖ग़͢ ༷Ͱॳظ͕༩͑ΒΕ͍ͯΔ 6a09e667 bb67ae85 3c6ef372 a54ff53a 510e527f 9b05688c 1f83d9ab
5be0cd19 (4byte x 8ݸ) ͜ͷॳظΛมԽ͍ͤͯ͘͞
͓͓·͔ͳྲྀΕ 1. ϝοηʔδΛ64byte͝ͱͷϒϩοΫʹׂ 2. ύσΟϯάॲཧ 3. લஈͷϋογϡͱϒϩοΫʹରͯ͠64ճͷϥϯ υॲཧΛͯ͠32byteͷϋογϡΛಘΔ 4. 3
ΛશϒϩοΫճ͢
ɾɾɾ ϥϯυ ϥϯυ ॳظ CZUF ϋογϡ CZUF ϋογϡ CZUF ࠷ऴతͳϋογϡ
CZUF ͓͓·͔ͳྲྀΕ ϥϯυ
ύσΟϯάॲཧ w ϝοηʔδΛCZUFͰׂͬͨ࠷ޙͷϒϩοΫʹదԠ w CZUFʹΒͳ͍͚ͩͰຒΊΔ w ͨͩ͠ɺͱϝοηʔδͷ࠷ޙʹCJUΛՃ w ͞ΒʹɺCZUFͷඌʹCZUFจͷͱϝοηʔδ Λ͍ΕΔ
w ݩʑ͖ͬͪΓCZUFͩͬͨ߹͞ΒʹϒϩοΫΛ Ճͯ͠ɺͦΕʹରͯ͠ύσΟϯάॲཧΛࢪ͢
ύσΟϯάॲཧ CZUFͷϝοηʔδͷ߹ ˞ਐͰਐͰ ˞CZUFCJUɺਐͰ BCBCDEDEFGFGBCBCDEDEFGFG BCBCDEDEFGFG BCBCDEDEFGFGBCBCDEDEFGFG BCBCDEDEFGFG
ϥϯυ w CZUFͷϒϩοΫΛCZUFʹ֦ுͯ͠ݸºCZUF Λੜ w ˢͱఆΛͬͯճͷϩʔςʔγϣϯॲཧతͳͷ Λࢪ͢
ϥϯυ CZUFͷϒϩοΫΛCZUFʹ֦ுͯ͠ݸºCZUF Λੜ ɾɾ
ɾɾ
w = [0] * 64 w[0:16] = to_chunks(chunk, n=32) for
i in range(16, 64): s0 = bin_xor(bin_rrot(w[i-15], 7), bin_rrot(w[i-15], 18), bin_rshift(w[i-15], 3)) s1 = bin_xor(bin_rrot(w[i-2], 17), bin_rrot(w[i-2], 19), bin_rshift(w[i-2], 10)) w[i] = bin_sum( w[i-16], s0, w[i-7], s1 ) IUUQTHJTUHJUIVCDPNOBOWFMFDCCDCCEEpMFTIBQZ-- ϥϯυ CZUFͷϒϩοΫΛCZUFʹ֦ுͯ͠ݸºCZUF Λੜ
ϥϯυ ˠͱˠͰมԽ ϥϯυॲཧ
GPSJJOSBOHF TVNCJO@TVN X<J> JOU@UP@MJTU @L<J>
I CJO@DI F G H CJO@YPS CJO@SSPU F CJO@SSPU F CJO@SSPU F TVNCJO@TVN CJO@YPS CJO@SSPU B CJO@SSPU B CJO@SSPU B CJO@NBK B C D TVN B C D E F G H ITVN B C D CJO@TVN E TVN <> F G H ॳظఆ
IUUQTDTSDOJTUHPWDTSDNFEJBQVCMJDBUJPOTpQTBSDIJWFEPDVNFOUTpQTQEG ϥϯυΛܦΔʹมԽ͍ͯ͘͠ ϥϯυ '*14ͷʹʮBCDʯͱ͍͏จࣈΛ4)"ͰϋογϡԽ͢ Δ༷ࢠ͕հ͞Ε͍ͯΔ
ӈγϑτԋࢉ ᵋࢉज़ՃࢉͰͷ্͚͕ͨΓʢ"EEJUJPOʣ ८ճӈγϑτԋࢉ ᵋ८ճϏοτγϑτԋࢉʢ3PUBUJPOʣ ഉଞతཧ ᵋഉଞతཧʢ903ʣ ARXܕ ೖྗʹରͯ͠ඇઢܗͳ݁ՌΛಘΔͨΊͷউͪύλʔϯ
͓͠·͍