$30 off During Our Annual Pro Sale. View Details »

NFCとしゃべってみよう

Aruneko
November 10, 2019

 NFCとしゃべってみよう

セキュリティミニキャンプ北海道 2019で発表した講義資料です

Aruneko

November 10, 2019
Tweet

More Decks by Aruneko

Other Decks in Technology

Transcript

  1. /'$ͱ͠Ό΂ͬͯΈΑ͏
    !ηΩϡϦςΟϛχΩϟϯϓ๺ւಓ
    ߹ಉձࣾ(FPSFQVCMJD+BQBOҰൠࣾஂ๏ਓ-0$"-
    ౻ా༏و

    View Slide

  2. ࣗݾ঺հ
    w ౻ా༏و !BSVOFLP

    w ॴଐ
    w ߹ಉձࣾ(FPSFQVCMJD+BQBO
    w Ұൠࣾஂ๏ਓ-0$"-
    w ਆށࡏॅࣨའग़਎
    w ೥ηΩϡϦςΟΩϟϯϓશࠃେձमྃ
    w ʙϛχΩϟϯϓ๺ւಓࢀՃ
    w ೥౓4FD)BDLࢥࡧۦಈίʔε
    w ϚΠφϯόʔΧʔυܳਓ

    View Slide

  3. ࣗݾ঺հ
    w ձࣾͰԿͯ͠Δʁ
    w "84ͰͷΠϯϑϥ࡞੒
    w 1ZUIPOͰͷ"1*αʔόʔ࡞੒
    w 3FBDU΍7VFΛ࢖ͬͨϑϩϯτΤϯυͷ࡞੒
    w झຯ
    w ετϦʔτϐΞϊΊ͙Γ
    w ਆށʹ͸ແବʹՕॴ͙Β͍͋ͬͨΓ͢Δ
    w ࡳຈͷϊϧϕαʹ΋͋ΔΒ͘͠ࡢ೔ߦ͖ͬͯͨ

    View Slide

  4. ࠓ೔΍Δ͜ͱ
    w /'$ͷ࢓༷ʹ͍ͭͯͷ֓આ
    w 'FMJDBͷ࢓༷Λ֬ೝͭͭ͠ύʔεࡁΈͷσʔλΛಡΈग़ͯ͠ΈΔ
    w 'FMJDBͷίϚϯυΛൃߦͯ͠ະύʔεͷੜσʔλΛಡΜͰΈΔ
    w 'FMJDBͷσʔλΛϦόʔεΤϯδχΞϦϯάͯ͠ΈΔ

    View Slide

  5. /'$ͬͯԿʁ

    View Slide

  6. /'$ͬͯԿͷ͜ͱʁ
    w /FBS'JFME$PNNVOJDBUJPO ۙڑ཭ແઢ௨৴

    w ਺DNʙ਺N͙Β͍ͷൣғͰి೾ͳͲΛ༻͍ͯ௨৴͢Δٕज़
    w 3'*% 3BEJP'SFRVFODZ*%FOUJpFS
    ͷ࣮૷ͷͻͱͭ
    w /'$͡Όͳ͍3'*%ɿϢχΫϩͷແਓϨδ༻ͷ3'*%
    w /'$'PSVNͰ࢓༷Λࡦఆ

    View Slide

  7. /'$ͷϞʔυ
    w /'$ػث ϦʔμεϚϗ
    ʹ͸࣍ͷͭͷϞʔυ͕͋Δ
    w λά Χʔυ
    ͷಡΈॻ͖ ඞਢػೳ

    w 11௨৴ ඞਢػೳ

    w ػثಉ࢜Ͱ௚઀௨৴͢Δػೳ
    w ΧʔυΤϛϡϨʔγϣϯ Φϓγϣϯػೳ

    w /'$ΧʔυͷΑ͏ʹৼΔ෣͏ػೳ

    View Slide

  8. /'$ͷ௨৴ن֨
    w /'$ʹ͸ͭͷ௨৴ن͕֨͋ΓɺͦΕͧΕมௐํ͕ࣜҟͳΔ
    w /'$ػث͸ɺ͜ΕΒશͯͷن֨ͱ௨৴Ͱ͖ͳ͚Ε͹ͳΒͳ͍
    w 5ZQF"͍ΘΏΔ.JGBSFɻ"NJJCP΍UBTQPͳͲ
    w 5ZQF#ϚΠφϯόʔΧʔυ΍ӡస໔ڐূͳͲ
    w 5ZQF'͍ΘΏΔ'FMJ$Bɻަ௨ܥ*$΍ܾࡁܥ*$ͳͲ

    View Slide

  9. /'$λάͷن֨
    w /'$λά͸/%&' /'$%BUB&YDIBOHF'PSNBU
    ʹଇͬͯ௨৴͢Δ
    w /%&'͸ύέοτ΍ίϚϯυʹؔ͢Δϓϩτίϧͷن֨
    w 5ZQF5PQB[ ࠃ಺Ͱ͸ݟͨ͜ͱͳ͍

    w 5ZQF.JGBSF6MUSBMJHIU "NJJCP

    w 5ZQF'FMJ$B ަ௨ܥ*$OBOBDP

    w 5ZQF"*40" UBTQP7JTBQBZ8BWF

    w 5ZQF#*40# ϚΠφϯόʔΧʔυύεϙʔτӡస໔ڐূ

    View Slide

  10. ͜͜·Ͱͷ·ͱΊ
    w /'$͸3'*%ͷҰछͰɺۙڑ཭ແઢ௨৴ͷͨΊͷن֨
    w /'$ػث͸ͭͷϞʔυΛαϙʔτ͢Δ
    w /'$ʹ͸छྨͷΞϧϑΝϕοτͰද͞ΕΔ௨৴ن͕֨͋Δ
    w /'$λάʹ͸छྨͷ਺ࣈͰද͞ΕΔϓϩτίϧͷن͕֨͋Δ
    w ͜͜·ͰΨοςϯ͍͚ͯͨͩ͠·ͨ͠Ͱ͠ΐ͏͔ʁ
    ㅟ ㅟ

    View Slide

  11. 'FMJ$BͷσʔλΛ೷͍ͯΈΔ

    View Slide

  12. ͜Ε͔Β΍Δ͜ͱ
    w /'$5ZQF'ن֨Ͱ͋Δ'FMJ$Bͱ௨৴ͯ͠
    w /'$5ZQFͷύέοτΛ΍ΓͱΓͭͭ͠
    w 'FMJ$Bͷத਎ΛಡΜͰ
    w ͲΜͳσʔλ͕ೖ͍ͬͯΔ͔ߟ࡯ͯ͠ΈΔ

    View Slide

  13. ४උ
    w ഑෍ͨ͠Ծ૝ϚγϯΛىಈ͍ͯͩ͘͠͞
    w ͏·͘ىಈ͠ͳ͔ͬͨΒڭ͍͑ͯͩ͘͞
    w ύεϫʔυ͸ʮOGDʯͰ͢
    w μ΢ϯϩʔυΛ๨Εͨਓ͸64#ϝϞϦͰ഑෍͢ΔͷͰ͓஌Β͍ͤͩ͘͞
    w 'FMJ$Bن֨ͷΧʔυΛ༻ҙ͍ͯͩ͘͠͞
    w ๨Εͨํ͸ԕྀͳ͓͘஌Β͍ͤͩ͘͞

    View Slide

  14. 3$4ͷ઀ଓ
    w 1$ຊମʹ3$4Λ઀ଓ
    w 7JSUVBM#PYଆʹ઀ଓ
    w ӈԼͷ64#ΞΠίϯΛΫϦοΫ
    w ʮ40/:3$41<>ʯʹνΣοΫΛೖΕΔ
    w ෺ཧϚγϯ઀ଓͷͨͼʹԾ૝Ϛγϯʹ઀ଓ͠௚͍ͯͩ͘͠͞ʜʜ

    View Slide

  15. 3$4ͷ઀ଓ֬ೝ
    w λʔϛφϧΛ։͍ͯʮQZUIPONOGDʯίϚϯυΛೖྗ
    w OGDQZͱ͍͏ϥΠϒϥϦ͕༻ҙ͍ͯ͠ΔίϚϯυ
    w σόΠε͕ݟ͔ͭΕ͹४උ׬ྃʂ
    security@minicamp:~$ python3 -m nfc
    This is the 1.0.3 version of nfcpy run in Python 3.6.8
    on Linux-5.0.0-32-generic-x86_64-with-Ubuntu-18.04-bionic
    I'm now searching your system for contactless devices
    ** found SONY RC-S380/P NFC Port-100 v1.11 at usb:001:004
    I'm not trying serial devices because you haven't told me
    -- add the option '--search-tty' to have me looking
    -- but beware that this may break other serial devs
    ୺຤͸͜Εˠ

    View Slide

  16. 'FMJ$B಺෦ͷσʔλߏ଄
    ϓϥΠϕʔτྖҬ ৄࡉෆ໌

    ݸਓ৘ใͳͲͷ֨ೲʹར༻
    ڞ௨ྖҬ γεςϜྖҬ
    αʔϏε
    ྖҬ
    ϒϩοΫ
    ྖҬ
    γεςϜྖҬ
    αʔϏε
    ྖҬ
    ϒϩοΫ
    ྖҬ
    ৐ंɾߪങཤྺͳͲͷ
    ֨ೲʹར༻

    View Slide

  17. 'FMJ$BͷσʔλʹͨͲΓண͘ʹ͸
    w ϓϥΠϕʔτྖҬ͸ಡΈॻ͖Ͱ͖ͳ͍ͷͰڞ௨ྖҬ͚ͩΛ؍࡯
    w Χʔυͷ*%Λัଊ
    w Χʔυ಺Ͱ࢖ΘΕ͍ͯΔγεςϜྖҬͷҰཡΛऔಘ
    w ֤γεςϜྖҬதͷαʔϏεྖҬͷҰཡΛऔಘ
    w ֤αʔϏεྖҬதͷϒϩοΫΛμϯϓ

    View Slide

  18. 'FMJ$BͷσʔλʹͨͲΓண͘ʹ͸
    w ϓϥΠϕʔτྖҬ͸ಡΈॻ͖Ͱ͖ͳ͍ͷͰڞ௨ྖҬ͚ͩΛ؍࡯
    w Χʔυͷ*%Λัଊ
    w Χʔυ಺Ͱ࢖ΘΕ͍ͯΔγεςϜྖҬͷҰཡΛऔಘ
    w ֤γεςϜྖҬதͷαʔϏεྖҬͷҰཡΛऔಘ
    w ֤αʔϏεྖҬதͷϒϩοΫΛμϯϓ

    View Slide

  19. 'FMJ$Bͷ*%
    w 'FMJ$Bʹ͸ΧʔυΛࣝผ͢ΔͨΊʹԼه৘ใ͕ຒΊࠐ·Ε͍ͯΔ
    w *%N .BOVGBDUVSF*%

    w Χʔυ͝ͱʹׂΓৼΒΕΔ͕ɺ؅ཧͯ͠ͳ͍ͷͰিಥ͢Δ͔΋ʁ
    w 1.N .BOVGBDUVSF1BSB.FUFS

    w ࠷େԠ౴࣌ؒΛఆٛʢ*%తͳػೳ͸ͳ͍ʣ

    View Slide

  20. *%NΛೝূʹ࢖͏
    w εΩϛϯάͯ͠*%NΛऔಘ
    w ΧʔυΤϛϡϨʔτػೳͰ
    ͦͷ*%NΛԠ౴Մೳ
    w ηΩϡΞ͕͞ཁٻ͞ΕΔͱ͜ΖͰ
    *%NΛz伴zͱͯ͠࢖ͬͪΌμϝ
    ˛εϚʔτϩοΫͷ4&4".&ެࣜϒϩάΑΓ

    View Slide

  21. *%Nͱ1.NΛऔಘͯ͠ΈΔ
    w ʮNJOJDBNQ@IPLLBJEP@ʯσΟϨΫτϦʹDE
    w ʮHJUQVMMʯͰ࠷৽൛ΛҾͬுͬͯ͘Δ
    w ʮQZUIPO@EVNQ@TZTUFNTQZʯͰΧʔυΛಡΈऔΔ
    w ޙͰ࢖͏ͷͰ*%Nͱ1.NΛϝϞ͓ͯ͜͠͏
    security@minicamp:~$ cd minicamp_hokkaido_2019/
    security@minicamp:~/minicamp_hokkaido_2019$ git pull
    security@minicamp:~/minicamp_hokkaido_2019$ python3 01_dump_systems.py
    IDm: 01010a107816b822
    PMm: 100b4b428485d0ff
    System Code: 0x0003
    System Code: 0xfe00
    System Code: 0x86a7

    View Slide

  22. 'FMJ$BͷσʔλʹͨͲΓண͘ʹ͸
    w ϓϥΠϕʔτྖҬ͸ಡΈॻ͖Ͱ͖ͳ͍ͷͰڞ௨ྖҬ͚ͩΛ؍࡯
    w Χʔυͷ*%Λัଊ
    w Χʔυ಺Ͱ࢖ΘΕ͍ͯΔγεςϜྖҬͷҰཡΛऔಘ
    w ֤γεςϜྖҬதͷαʔϏεྖҬͷҰཡΛऔಘ
    w ֤αʔϏεྖҬதͷϒϩοΫΛμϯϓ

    View Slide

  23. γεςϜྖҬͷҰཡ
    w 3FRVFTUTZTUFNDPEFίϚϯυΛൃߦ͢ΔͱγεςϜίʔυΛऔಘՄೳ
    w ͖ͬ͞@EVNQ@TZTUFNTQZͰऔಘͯͨ͠΍ͭ
    w Y'&͸'FMJ$BͰ༧໿ࡁΈ
    w ͦΕҎ֎͕Χʔυಠࣗͷσʔλ
    w ྫ͑͹ަ௨ܥ*$ αΠόωن֨
    ͸Yʹ֨ೲͯ͋͠Δ
    w ࣗ෼͕ௐ΂ͯΈͨΧʔυʹ͸͍ͭ͘γεςϜྖҬ͕͋ͬͨʁ

    View Slide

  24. 'FMJ$BͷσʔλʹͨͲΓண͘ʹ͸
    w ϓϥΠϕʔτྖҬ͸ಡΈॻ͖Ͱ͖ͳ͍ͷͰڞ௨ྖҬ͚ͩΛ؍࡯
    w Χʔυͷ*%Λัଊ
    w Χʔυ಺Ͱ࢖ΘΕ͍ͯΔγεςϜྖҬͷҰཡΛऔಘ
    w ֤γεςϜྖҬதͷαʔϏεྖҬͷҰཡΛऔಘ
    w ֤αʔϏεྖҬதͷϒϩοΫΛμϯϓ

    View Slide

  25. αʔϏεྖҬͷҰཡ
    w αʔϏεྖҬͷҰཡΛऔಘ͢ΔίϚϯυ͸ͳ͍ʜʜ
    w ͷͰɺͻͱ·ͣશ෦μϯϓͯ͠Έͯ༗ޮͳ΋ͷ͚ͩऔಘ
    w 4FSWJDF$PEF͸όΠτͳͷͰYʙY''''ͷൣғΛશͯμϯϓʂ
    w ʮQZUIPO@EVNQ@TFSWJDF@DPEFTQZ<4:4>ʯͰμϯϓͯ͠ΈΔ
    w <4:4>ͷ͜ͱΖ͸ઌ΄Ͳௐ΂ͨγεςϜίʔυΛਐ਺Ͱೖྗ
    w ͔͔࣌ؒΔ͚ͲͣΒͣΒͬͱ͍ͬͺ͍ग़ͯ͘Δ͸ͣ

    View Slide

  26. αʔϏεྖҬͷଐੑ
    छྨ આ໌
    ϥϯμϜ
    3BOEPN
    ࡶଟͳσʔλ֨ೲ༻
    αΠΫϦοΫ
    $ZDMJD
    ϩʔςʔτ͢Δ
    ϩάͷ֨ೲ༻
    ύʔε
    1VSTF
    ਖ਼ͷ੔਺ઐ༻"1*
    w ͬ͘͟Γछྨ
    w ͜ͷछྨΛݟͯதͷσʔλΛ૝૾
    w ͦΕͧΕʹ
    w ಡΈऔΓઐ༻ϑϥά
    w ൿີ伴͕ඞཁ͔
    w ͓෼͔Γͷ௨Γɺ伴ෆཁͷσʔλ͔͠ಡΊͳ͍

    View Slide

  27. 'FMJ$BͷσʔλʹͨͲΓண͘ʹ͸
    w ϓϥΠϕʔτྖҬ͸ಡΈॻ͖Ͱ͖ͳ͍ͷͰڞ௨ྖҬ͚ͩΛ؍࡯
    w Χʔυͷ*%Λัଊ
    w Χʔυ಺Ͱ࢖ΘΕ͍ͯΔγεςϜྖҬͷҰཡΛऔಘ
    w ֤γεςϜྖҬதͷαʔϏεྖҬͷҰཡΛऔಘ
    w ֤αʔϏεྖҬதͷϒϩοΫΛμϯϓ

    View Slide

  28. ϒϩοΫྖҬͷऔಘ
    w 3FBE8JUIPVU&ODSZQUJPOίϚϯυΛൃߦͯ͠த਎ΛಡΉ
    w ൿີ伴࣋ͬͯͳ͍ͷͰ࢓ํͳ͍Ͷ
    w ʮQZUIPO@EVNQ@CMPDLTQZ<4:4><4&37*$&>ʯͰμϯϓ
    w ·ͣ͸γεςϜίʔυͱαʔϏείʔυΛࢦఆ
    w ͋ͱ͸3FBE8JUIPVU&ODSZQUJPOίϚϯυͰద౰ͳճ਺μϯϓ
    w ԿճμϯϓͰ͖Δ͔͸αʔϏεଐੑʹΑ͍ͬͯΖ͍Ζ
    w 3BOEPNͩͱճɺ$ZDMJDͩͱճͱ͔

    View Slide

  29. ͜͜·Ͱͷ·ͱΊ
    w 'FMJ$Bʹ͸*%Nͱ1.N͕ຒΊࠐΜͰ͋Δ
    w ݸਓ৘ใͳͲΛ֨ೲ͢ΔϓϥΠϕʔτྖҬͱͦΕҎ֎ͷڞ௨ྖҬ͕͋Δ
    w ڞ௨ྖҬ͸େ͖͍ॱʹγεςϜɺαʔϏεɺϒϩοΫྖҬʹ۠੾ΒΕΔ

    View Slide

  30. ͍ͬͨΜٳܜ

    View Slide

  31. 'FMJ$Bͱ͠Ό΂ͬͯΈΔ

    View Slide

  32. ͱ͜ΖͰօ͞Μ
    w ͖ͬ͞͸ϓϩάϥϜΛಈ͔͚ͩ͢Ͱྑ͍ײ͡ʹσʔλ͕ಡΊ·ͨ͠
    w OGDQZ͕ྑ͍ײ͡ʹσʔλΛύʔεͯ͘͠ΕΔ͔ΒͰ͢Ͷ
    w ͱɺ͍͏͜ͱͰੜσʔλΛ৮ͬͯΈΑ͏ʂ

    View Slide

  33. ४උ
    w 7JTVBM4UVEJP$PEFΛىಈ
    w λʔϛφϧͰʮNJOJDBNQ@IPLLBJEP@ʯσΟϨΫτϦʹ͍Δ͜ͱΛ֬ೝ
    w ʮDPEFʯͰىಈʢ࠷ޙͷυοτΛ๨Εͣʹʣ
    w ʮ@EJBMPHVF@XJUI@OGDQZʯΛ։͘
    w ʮදࣔʯ͔ΒʮλʔϛφϧʯͰλʔϛφϧΛදࣔ
    w $USM4IJGU!Ͱ΋0,
    security@minicamp:~/minicamp_hokkaido_2019$ code .
    security@minicamp:~/minicamp_hokkaido_2019$

    View Slide

  34. *%N 1.N 4:4ΛऔͬͯΈΔ
    w ઀ଓͯ͠1PMMJOH໋ྩΛ࣮ߦ͢ΔͱҎԼͷ৘ใ͕औΕΔ
    w *%N
    w 1.N
    w σϑΥϧτͷγεςϜίʔυ

    View Slide

  35. 1PMMJOHίϚϯυͷൃߦ
    w NBJOؔ਺Λฤू
    w 5ZQF5BHʹ઀ଓͯ͠੾அ͢Δͱ͜Ζ·Ͱ͸هड़ࡁΈ
    w QPMMJOHίϚϯυΛൃߦͯ͠ɺͦͷ݁ՌΛϑΥʔϚοτͯ͠දࣔͯ͠ΈΔ
    def main() -> None:
    felica = Type3Tag.connect()
    # ͜ͷ2ߦΛ௥Ճ
    polling_result = felica.polling()
    print(polling_result.format_data)
    felica.disconnect()

    View Slide

  36. 1PMMJOHͷ݁ՌΛಡΈղ͘
    w ͻͱ·ͣฦ͖ͬͯͨੜύέοτΛݟͯΈΔ
    w ϝϞͱݟൺ΂ͯΈΔ
    w ͢ΔͱͪΌΜͱ֨ೲ͞Ε͍ͯΔͱΘ͔Δ
    d7 05 00 00 00 00 08 14 01 01 01 0a 10 78 16 b8 22 10 0b 4b 42 84 85 d0 ff 00 03
    IDm: 01010a107816b822
    PMm: 100b4b428485d0ff
    d7 05 00 00 00 00 08 14 01 01 01 0a 10 78 16 b8 22 10 0b 4b 42 84 85 d0 ff 00 03
    *%N 1.N
    ͜Ε͸Կʁ

    View Slide

  37. 1PMMJOHͷ݁ՌΛಡΈղ͘
    w ͻͱ·ͣฦ͖ͬͯͨੜύέοτΛݟͯΈΔ
    w ϝϞͱݟൺ΂ͯΈΔ
    w ͢ΔͱͪΌΜͱ֨ೲ͞Ε͍ͯΔͱΘ͔Δ
    d7 05 00 00 00 00 08 14 01 01 01 0a 10 78 16 b8 22 10 0b 4b 42 84 85 d0 ff 00 03
    IDm: 01010a107816b822
    PMm: 100b4b428485d0ff
    d7 05 00 00 00 00 08 14 01 01 01 0a 10 78 16 b8 22 10 0b 4b 42 84 85 d0 ff 00 03
    *%N 1.N
    ͜Ε͸Կʁ

    View Slide

  38. 1PMMJOHͷ݁ՌΛಡΈղ͘
    w ͻͱ·ͣฦ͖ͬͯͨੜύέοτΛݟͯΈΔ
    w ϝϞͱݟൺ΂ͯΈΔ
    w ͢ΔͱͪΌΜͱ֨ೲ͞Ε͍ͯΔͱΘ͔Δ
    d7 05 00 00 00 00 08 14 01 01 01 0a 10 78 16 b8 22 10 0b 4b 42 84 85 d0 ff 00 03
    IDm: 01010a107816b822
    PMm: 100b4b428485d0ff
    d7 05 00 00 00 00 08 14 01 01 01 0a 10 78 16 b8 22 10 0b 4b 42 84 85 d0 ff 00 03
    *%N 1.N γεςϜίʔυ

    View Slide

  39. ͪͳΈʹ
    d7 05 00 00 00 00 08 14 01 01 01 0a 10 78 16 b8 22 10 0b 4b 42 84 85 d0 ff 00 03
    *%N 1.N
    Ϩεϙϯεϔομ
    Ϩεϙϯε௕

    γεςϜίʔυ

    View Slide

  40. γεςϜίʔυͷҰཡΛऔΔ
    w 3FRVFTU4ZTUFN$PEFίϚϯυΛൃߦ͢ΔͱऔΕΔ
    w ͨͩ͠಺෦తʹ*%Nͱ1.Nͷ஋Λ࢖͏ͷͰࣄલʹ૊ΈࠐΜͰ͓͘
    def main() -> None:
    felica = Type3Tag.connect()
    polling_result = felica.polling()
    # ͔͜͜Β3ߦ௥Ճ
    felica.set_idm_and_pmm(polling_result)
    service_codes = felica.request_system_code()
    print(service_codes.format_data)
    felica.disconnect()

    View Slide

  41. 3FRVFTU4ZTUFN$PEFͷ݁ՌΛಡΉ
    w ΍ͬͺΓੜύέοτΛோΊͯΈΔ
    w ϝϞͯ͋ͬͨ͠4ZTUFN$PEFͷҰཡΛݟͯΈΔ
    w ͪΌΜͱ֨ೲ͞Εͯͨ
    d7 05 00 00 00 00 08 11 0d 01 01 0a 10 78 16 b8 22 03 00 03 fe 00 86 a7
    d7 05 00 00 00 00 08 11 0d 01 01 0a 10 78 16 b8 22 03 00 03 fe 00 86 a7
    System Code: 0x0003
    System Code: 0xfe00
    System Code: 0x86a7
    γεςϜίʔυY
    ͜Ε͸Կʁ

    View Slide

  42. 3FRVFTU4ZTUFN$PEFͷ݁ՌΛಡΉ
    w ΍ͬͺΓੜύέοτΛோΊͯΈΔ
    w ϝϞͯ͋ͬͨ͠4ZTUFN$PEFͷҰཡΛݟͯΈΔ
    w ͪΌΜͱ֨ೲ͞Εͯͨ
    d7 05 00 00 00 00 08 11 0d 01 01 0a 10 78 16 b8 22 03 00 03 fe 00 86 a7
    d7 05 00 00 00 00 08 11 0d 01 01 0a 10 78 16 b8 22 03 00 03 fe 00 86 a7
    System Code: 0x0003
    System Code: 0xfe00
    System Code: 0x86a7
    γεςϜίʔυY
    ͜Ε͸Կʁ

    View Slide

  43. 3FRVFTU4ZTUFN$PEFͷ݁ՌΛಡΉ
    w ΍ͬͺΓੜύέοτΛோΊͯΈΔ
    w ϝϞͯ͋ͬͨ͠4ZTUFN$PEFͷҰཡΛݟͯΈΔ
    w ͪΌΜͱ֨ೲ͞Εͯͨ
    d7 05 00 00 00 00 08 11 0d 01 01 0a 10 78 16 b8 22 03 00 03 fe 00 86 a7
    d7 05 00 00 00 00 08 11 0d 01 01 0a 10 78 16 b8 22 03 00 03 fe 00 86 a7
    System Code: 0x0003
    System Code: 0xfe00
    System Code: 0x86a7
    γεςϜίʔυY
    ͜Ε͸Կʁ

    View Slide

  44. ͪͳΈʹ ͦͷ

    d7 05 00 00 00 00 08 11 0d 01 01 0a 10 78 16 b8 22 03 00 03 fe 00 86 a7
    γεςϜίʔυY
    *%N
    γεςϜίʔυͷ਺

    View Slide

  45. ༗ޮͳαʔϏείʔυΛௐࠪ
    w ·ͣ͸αʔϏείʔυͷҰཡΛ࿈൪Ͱ࡞੒
    w ·Δ͝Ͳ3FRVFTU4FSWJDF໋ྩͷҾ਺ͱͯ͠౉͢
    w ֤αʔϏείʔυʹରͯ͠伴όʔδϣϯΛฦͯ͘͠ΕΔ
    def main() -> None:
    felica = Type3Tag.connect()
    polling_result = felica.polling()
    felica.set_idm_and_pmm(polling_result)
    # ͔͜͜Β௥Ճɾมߋ
    service_codes = [ServiceCode(i) for i in range(0, 8)]
    key_versions = felica.request_service(service_codes)
    print(key_versions.format_data)
    felica.disconnect()
    w ͍͍ͨͯY
    w ແޮͳ৔߹͸Y''''

    View Slide

  46. 3FRVFTU4FSWJDFͷ݁ՌΛಡΉ
    w ੜύέοτ
    w 伴όʔδϣϯ
    w YPSY''''
    w ͪΌΜͱ֨ೲ͞ΕͯΔ
    d7 05 00 00 00 00 08 1b 03 01 01 0a 10 78 16 b8 22 08 03 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    d7 05 00 00 00 00 08 1b 03 01 01 0a 10 78 16 b8 22 08 03 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    ,FZ7FSTJPOͷ਺ ,FZ7FSTJPOY

    View Slide

  47. 3FRVFTU4FSWJDFͷ݁ՌΛಡΉ
    w ੜύέοτ
    w 伴όʔδϣϯ
    w YPSY''''
    w ͪΌΜͱ֨ೲ͞ΕͯΔ
    d7 05 00 00 00 00 08 1b 03 01 01 0a 10 78 16 b8 22 08 03 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    d7 05 00 00 00 00 08 1b 03 01 01 0a 10 78 16 b8 22 08 03 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    ,FZ7FSTJPOͷ਺ ,FZ7FSTJPOY

    View Slide

  48. 3FRVFTU4FSWJDFͷ݁ՌΛಡΉ
    w ੜύέοτ
    w 伴όʔδϣϯ
    w YPSY''''
    w ͪΌΜͱ֨ೲ͞ΕͯΔ
    d7 05 00 00 00 00 08 1b 03 01 01 0a 10 78 16 b8 22 08 03 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    d7 05 00 00 00 00 08 1b 03 01 01 0a 10 78 16 b8 22 08 03 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    ,FZ7FSTJPOͷ਺ ,FZ7FSTJPOY

    View Slide

  49. ऄ଍ɿαʔϏείʔυͷಡΈํ
    w όΠτΛϏοτϏοτʹ෼͚Δ
    w ྫ͑͹Y#ͷ৔߹

    Y Y#
    αʔϏε൪߸ αʔϏεଐੑ

    View Slide

  50. ϒϩοΫΛಡΉ
    w 3FBE8JUIPVU&ODSZQUJPO໋ྩΛൃߦ͢ΔͱಡΊΔ
    w 4FSWJDF$PEFͱ#MPDL$PEFΛࢦఆͯ͠ಡΜͰΈΑ͏
    def main() -> None:
    felica = Type3Tag.connect()
    polling_result = felica.polling()
    felica.set_idm_and_pmm(polling_result)
    service_codes = [ServiceCode(0x008B)] # ͜͜͸޷͖ͳServiceCodeͰ
    for i in range(0, 20):
    block_codes = [BlockCode(i, 0)]
    block_responses = felica.read_without_encryption(service_codes, block_codes)
    print(block_responses.format_data)
    felica.disconnect()

    View Slide

  51. 3FBE8JUIPVU&ODSZQUJPOͷ݁Ռ
    w ੜύέοτʢϔομͱ*%N͸লུʣ
    w ઌʹಡΈࠐΜͰ͋ͬͨϒϩοΫͷத਎
    w ͪΌΜͱೖͬͯΔ
    00 00 01 00 00 00 00 00 00 00 00 20 00 00 dc 00 00 01 d7
    0000000000000000200000dc000001d7
    00 00 01 00 00 00 00 00 00 00 00 20 00 00 dc 00 00 01 d7

    View Slide

  52. 3FBE8JUIPVU&ODSZQUJPOͷ݁Ռ
    w ੜύέοτʢϔομͱ*%N͸লུʣ
    w ઌʹಡΈࠐΜͰ͋ͬͨϒϩοΫͷத਎
    w ͪΌΜͱೖͬͯΔ
    00 00 01 00 00 00 00 00 00 00 00 20 00 00 dc 00 00 01 d7
    0000000000000000200000dc000001d7
    00 00 01 00 00 00 00 00 00 00 00 20 00 00 dc 00 00 01 d7

    View Slide

  53. 3FBE8JUIPVU&ODSZQUJPOͷ݁Ռ
    w ੜύέοτʢϔομͱ*%N͸লུʣ
    w ઌʹಡΈࠐΜͰ͋ͬͨϒϩοΫͷத਎
    w ͪΌΜͱೖͬͯΔ
    00 00 01 00 00 00 00 00 00 00 00 20 00 00 dc 00 00 01 d7
    0000000000000000200000dc000001d7
    00 00 01 00 00 00 00 00 00 00 00 20 00 00 dc 00 00 01 d7

    View Slide

  54. ͜͜·Ͱͷ·ͱΊ
    w ੜύέοτͱର࿩͠·ͨ͠
    w ʮԿ͕ฦͬͯ͘Δ͔ʯΛ஌͍ͬͯΔͱੜύέοτ΋ಡΈ΍͍͢ ౰ࣾൺ

    View Slide

  55. ϒϩοΫͷத਎

    View Slide

  56. ͱ͜ΖͰօ͞Μ
    w ϒϩοΫͷத਎͸֤͕ࣾࣗ༝ʹܾఆՄೳ
    w ؾʹͳΔɻΊͬͪΌؾʹͳΔɻ
    w ͱݴ͏͜ͱͰ
    w ͓ख࣋ͪͷ'FMJ$BʹͲΜͳσʔλ͕Ͳ͜ʹ֨ೲ͞Ε͍ͯΔ͔
    ϦόʔεΤϯδχΞϦϯάͯ͠୳ͬͯΈΔ

    View Slide

  57. ϦόʔεΤϯδχΞϦϯάମݧ
    w ͜ͷߨٛͷऴΘΓʹάϧʔϓͣͭ୅දऀ͕෼͙Β͍Ͱൃද
    w ࣍ͷ߲໨ʹ͍ͭͯ·ͱΊͯΈΔ
    w σʔλ͕ೖ͍ͬͯΔγεςϜίʔυαʔϏείʔυ
    w ϒϩοΫதʹ͋Δ֤σʔλͷΦϑηοτͱύʔεํ๏
    w ྫʣOόΠτ໨ʙNόΠτ໨ʹϏοάΤϯσΟΞϯͰ࢒ߴΛ֨ೲ
    w ༨༟͋Δਓ͸1ZUIPOͰύʔαʔॻ͍ͯ΋0,
    w ϝϞఔ౓ʹ·ͱΊͯ΋ΒͬͯɺલͰϓϩδΣΫλʔʹܨ͍Ͱൃද͍ͯͩ͘͠͞ʂ

    View Slide

  58. )PXUPSFWFSTFFOHJOFSSJOH
    w ࣗ෼ͷΧʔυͷϒϩοΫྖҬʹԿ͕֨ೲ͞Ε͍ͯΔ͔ਪଌ͠Α͏
    w ·ͣ͸ʮ@EVNQ@CMPDLTQZʯͰϒϩοΫΛશ෦μϯϓ
    w ೖͬͯͦ͏ͳσʔλʹ໨੕Λ෇͚Δ
    w ϥϯμϜଐੑɿνϟʔδ࢒ߴɾ໊લɾֶ੶൪߸ʜʜFUD
    w αΠΫϦοΫଐੑɿར༻ཤྺ

    View Slide

  59. ϦόʔεΤϯδχΞϦϯάͷίπ
    w ࣮֬ʹΘ͔͍ͬͯΔσʔλͱൺֱ͢Δ
    w ࢒ߴɹˠਐ਺ʹม׵ͯ֘͠౰͢Δ஋Λ୳͢ʢϦτϧΤϯσΟΞϯؚΊʣ
    w จࣈྻˠ65'ͱ͔4IJGU@+*4ͷίʔυʹม׵ͯ͠୳ͯ͠ΈΔ
    w ಉ͡छྨͰɺผͷΧʔυͱൺֱ͢Δ
    w ϑΥʔϚοτ͸ಉ͡ͳͷͰҟͳ͍ͬͯΔ৔ॴ͔Βม਺Λݟ͚ͭΔ
    w पғͷσʔλ͔Βม਺ͷ஋Λਪଌͯ͠ΈΔ

    View Slide

  60. ώϯτू
    w ௨৴༻ޠͷجૅ஌ࣝαΠόωن֨8"0/ͳͲ
    w IUUQTXXXXEJDPSH
    w .JU$PPQ େֶੜڠ*$Χʔυ

    w IUUQTHJUBSVOFLPOFUBSVOFLP.JU$PPQ

    View Slide

  61. ͓ΘΓʹ
    w ࠓ೔͸ओʹ'FMJ$Bͷϓϩτίϧʹֶ͍ͭͯͼ·ͨ͠
    w ୯ͳΔϓϥενοΫͷΧʔυͰ͕͢ɺϓϩτίϧΛֶͿͱzର࿩zͰ͖·͢
    w 'FMJ$B͚ͩͰͳ͘.JGBSF΍*40ΛֶͿͱ΋ͬͱੈք͕޿͕Γ·͢

    View Slide

  62. ࢀߟจݙ
    w 'FMJDB͔Β৘ใΛٵ͍ग़ͯ͠ΈΔ'FMJDBͷ࢓༷ฤ
    w IUUQTRJJUBDPN:BTVBLJ/BLB[BXBJUFNTEGBGBGE
    w ௨৴༻ޠͷجૅ஌ࣝ
    w IUUQTXXXXEJDPSH
    w 'FMJ$BΧʔυϢʔβʔζϚχϡΞϧൈਮ൛
    w IUUQTXXXTPOZDPKQ1SPEVDUTGFMJDBCVTJOFTTUFDITVQQPSUEBUB
    DBSE@VTFSTNBOVBM@QEG
    w OGDQZ
    w IUUQTHJUIVCDPNOGDQZOGDQZ

    View Slide