Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
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
280
単方向マイクロペイメントチャネル(ビットコイン)
egapool
0
290
bitcoinトランザクション総復習 #blockchainkyoto
egapool
1
340
Other Decks in Technology
See All in Technology
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
570
2026TECHFRESH畢業分享會 - Lightning Talk - 打造精準高效的 MCP 設計模式與測試實務
line_developers_tw
PRO
0
690
LLMと共に進化するプロセスを目指して
ymatsuwitter
12
3.9k
Android の公式 Skill / Android skills
yanzm
0
120
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
170
AAIFに入ってみた ~内から見えるコミュニティ動向~
sato4
0
130
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
680
AIの性能が向上しても未解決な組織の重大問題は何か?/An Unsolved Organizational Problem in the Age of AI
moriyuya
3
600
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
4
1.2k
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
3
2.1k
AWSシリコン最前線 〜AI時代のチップ選択を読み解く〜
htokoyo
2
390
データサイエンスを価値につなげるプロジェクト設計 〜 DS一年目が現場で得た気づき 〜
ysd113
1
130
Featured
See All Featured
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
830
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
450
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
420
Joys of Absence: A Defence of Solitary Play
codingconduct
1
390
Site-Speed That Sticks
csswizardry
13
1.2k
How to Think Like a Performance Engineer
csswizardry
28
2.6k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
390
How to train your dragon (web standard)
notwaldorf
97
6.7k
YesSQL, Process and Tooling at Scale
rocio
174
15k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Code Review Best Practice
trishagee
74
20k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
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ܕ ೖྗʹରͯ͠ඇઢܗͳ݁ՌΛಘΔͨΊͷউͪύλʔϯ
͓͠·͍