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
290
単方向マイクロペイメントチャネル(ビットコイン)
egapool
0
290
bitcoinトランザクション総復習 #blockchainkyoto
egapool
1
350
Other Decks in Technology
See All in Technology
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
270
What's new in Go 1.27?
ciarana
0
190
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
Head First モブプログラミング / Head First Mobprogramming
takaking22
10
12k
同じWAFが、攻撃の“形”は弾く── 正当な“形”の不正は通す
kuroneko13
0
220
自宅NWにISR4331を導入してみた話
okaits
0
110
Genie Codeハンズオン応用編
taka_aki
0
120
少人数チームで実現する、大規模AWSサーバーレス基盤における"揺らがない"信頼性運用
maimyyym
1
110
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
410
Webアクセシビリティ入門 2026
recruitengineers
PRO
3
640
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
220
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
370
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Everyday Curiosity
cassininazir
0
280
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
370
The untapped power of vector embeddings
frankvandijk
2
1.8k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
KATA
mclloyd
PRO
35
15k
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Odyssey Design
rkendrick25
PRO
2
760
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
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ܕ ೖྗʹରͯ͠ඇઢܗͳ݁ՌΛಘΔͨΊͷউͪύλʔϯ
͓͠·͍