Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DroidKaigi 2023

ARIYAMA Keiji
September 14, 2023

DroidKaigi 2023

2023/09/14開催の DroidKaigi 2023 で発表した 「Host-based Card Emulationで簡単NFC生活」の発表資料です。

ARIYAMA Keiji

September 14, 2023
Tweet

More Decks by ARIYAMA Keiji

Other Decks in Technology

Transcript

  1. C-LIS CO., LTD.

    View Slide

  2. )PTUCBTFE$BSE&NVMBUJPOͰ
    ؆୯/'$ੜ׆
    %SPJE,BJHJ
    ༗ࢁɹܓೋʢ"3*:".",FJKJʣ

    View Slide

  3. C-LIS CO., LTD.
    ༗ࢁܓೋʢ"3*:".",FJKJʣ
    $-*4$0 -5%
    "OESPJEΞϓϦ։ൃνϣοτσΩϧ
    keiji
    Photo by Koji MORIGUCHI (MORIGCHOWDER)

    View Slide

  4. "HFOEB
    εϚʔτΧʔυͱ/'$
    )PTUCBTFE$BSE&NVMBUJPOʢ)$&ʣ
    )$&Λ࣮૷͢Δ
    εϚʔτΧʔυΛࢧ͑Δن֨
    )$&ͷམͱ݀͠
    ·ͱΊ

    View Slide

  5. εϚʔτΧʔυ
    *$νοϓΛ಺ଂͯ͠৘ใΛॲཧʢԋࢉʣͰ͖Δ
    ઀৮ɾඇ઀৮ͰϦʔμʔͱ௨৴͢Δ
    ଱λϯύੑͷ͋ΔνοϓͷதʹΞϓϦέʔγϣϯͱ৘ใΛ֨ೲͰ͖Δ
    ʮεϚʔτΧʔυʯͷఆٛ͸ɺίϯςΩετʹΑͬͯҟͳΔ৔߹͕͋Γ·͢

    View Slide

  6. εϚʔτΧʔυͷྫ
    *$0$"ʗ4VJDB
    ΫϨδοτΧʔυ
    ӡస໔ڐূ
    ࡏཹΧʔυ
    ҩࢣࢿ֨ূʢ)1,*ʣ
    ϚΠφϯόʔΧʔυʢ+1,*ʣ

    View Slide

  7. +BWB$BSE
    +BWBͰϓϩάϥϜՄೳͳεϚʔτΧʔυ
    ॻ͖׵͑ՄೳͳΧʔυ͕ߪೖՄೳ

    View Slide

  8. +BWB$BSEͷ੍໿
    +BWB4&ͷίϯύΠϥ͕ඞཁ
    +BWBͷαϒηοτ
    w ࢖͑ͳ͍Ϋϥε͕͋Δ
    w JOU͕࢖͑ͳ͍͜ͱ͕͋Δ
    ෆشൃϝϞϦͷ༰ྔ͕খ͍͞ʢ,#ఔ౓ʣ
    ։ൃϊ΢ϋ΢͕खʹೖΓͮΒ͍

    View Slide

  9. /'$
    /FBS'JFME$PNNVOJDBUJPOʢۙڑ཭ແઢ௨৴ʣ
    ʮϦʔμʔʢಡΈऔΔଆʣʯͱʮλάɾΧʔυʢಡΈऔΒΕΔଆʣʯ͕͋Δ

    View Slide

  10. "OESPJEͷ/'$ରԠ

    Ϧʔμʔ
    w 'PSFHSPVOE%JTQBUDI"OESPJE
    w 3FBEFSNPEF"OESPJE
    λάʢΧʔυΤϛϡϨʔγϣϯʣ
    w $BSEFNVMBUJPOXJUIBTFDVSFFMFNFOU
    w )PTUCBTFE$BSE&NVMBUJPO"OESPJE
    w )PTUCBTFE$BSE&NVMBUJPO'FMJDB"OESPJE

    View Slide

  11. "HFOEB
    εϚʔτΧʔυͱ/'$
    )PTUCBTFE$BSE&NVMBUJPOʢ)$&ʣ
    )$&Λ࣮૷͢Δ
    εϚʔτΧʔυΛࢧ͑Δن֨
    )$&ͷམͱ݀͠
    ·ͱΊ

    View Slide

  12. )PTUCBTFE$BSE&NVMBUJPOʢ)$&ʣ
    /'$Λ௨ͯ͡ɺ"OESPJE୺຤ΛλάɾΧʔυͷΑ͏ʹৼΔ෣ΘͤΔػೳ

    "OESPJE୺຤
    )PTU$16
    /'$ίϯτϩʔϥʔ
    /'$Ϧʔμʔ
    IUUQTEFWFMPQFSBOESPJEDPNHVJEFUPQJDTDPOOFDUJWJUZOGDIDF

    View Slide

  13. $BSE&NVMBUJPOXJUIBTFDVSFFMFNFOU

    IUUQTEFWFMPQFSBOESPJEDPNHVJEFUPQJDTDPOOFDUJWJUZOGDIDF
    $BSE&NVMBUJPOXJUIBTFDVSFFMFNFOU
    "OESPJE୺຤
    4FDVSF&MFNFOU
    )PTU$16
    /'$ίϯτϩʔϥʔ
    /'$Ϧʔμʔ

    View Slide

  14. )$&ͷར఺
    εϚʔτϑΥϯΛߴػೳͳεϚʔτΧʔυͱͯ͠ར༻Ͱ͖Δ
    w େ༰ྔόοςϦʔ
    w େ༰ྔετϨʔδ
    w σΟεϓϨΠ
    w λονύωϧ
    w ωοτϫʔΫ௨৴
    w ೝূʹόΠϯυ͞Εͨ҉߸ݤ

    View Slide

  15. )$&ͷར༻γʔϯ
    ϞόΠϧӡస໔ڐূ
    *40*&$

    1FSTPOBMJEFOUJ
    fi
    DBUJPOŠ*40DPNQMJBOUESJWJOHMJDFODFŠ1BSU

    .PCJMFESJWJOHMJDFODF N%-
    BQQMJDBUJPO
    (PPHMFʹΑΔN%PD͓ΑͼN%PD3FBEFSͷϦϑΝϨϯε࣮૷
    IUUQTHJUIVCDPNHPPHMFJEFOUJUZDSFEFOUJBM

    View Slide

  16. "HFOEB
    εϚʔτΧʔυͱ/'$
    )PTUCBTFE$BSE&NVMBUJPOʢ)$&ʣ
    )$&Λ࣮૷͢Δ
    εϚʔτΧʔυΛࢧ͑Δن֨
    )$&ͷམͱ݀͠
    ·ͱΊ

    View Slide

  17. खॱ
    )PTU"QEV4FSWJDFΛ࣮૷
    "*%ϑΟϧλʔΛهड़
    "OESPJE.BOJGFTUΛઃఆ

    View Slide

  18. )PTU"QEV4FSWJDFΛ࣮૷

    class HceService : HostApduService() {


    override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {


    Log.d(TAG, "commandApdu: ${commandApdu.toHex()}")


    return byteArrayOf(0x90.toByte(), 0x00)


    }


    override fun onDeactivated(reason: Int) {


    }


    companion object {


    private val TAG: String = HceService::class.java.simpleName


    }


    }


    private fun ByteArray.toHex(): String = joinToString(":") { "%02x".format(it).uppercase() }


    private fun Byte.toUnsignedInt(): Int = (this.toInt() and 0xFF)

    View Slide

  19. "*%ϑΟϧλʔΛهड़



    android:description="@string/hce_service_description"


    android:requireDeviceUnlock="false">




    android:category="other"


    android:description="@string/aid_description">









    SFTYNMIDFTFSWJDFYNM

    View Slide

  20. "OESPJE.BOJGFTUΛઃఆ


    xmlns:tools="http://schemas.android.com/tools">



    android:name=".HceService"
    android:exported="true"
    android:permission="android.permission.BIND_NFC_SERVICE">



    android:name="android.nfc.cardemulation.host_apdu_service"
    android:resource="@xml/hceservice" />



    View Slide

  21. Ϧʔμʔ͔Βͷݺͼग़͠
    /'$ϦʔμʔΛ༻ҙ͢Δ
    w 40/:1B4P3J3$44ʢۀ຿༻ʣ
    w "EWBODFE$BSE4ZTUFNT"$36
    ͳͲ
    ੜ࢈ऴྃ༧ఆɺݱࡏ͸৽ܕͷ1B4P3J3$4ʲۀ຿༻్ઐ༻Ϟσϧʳ͕ൢച

    View Slide

  22. ࣮ࡍʹݺͼग़ͯ͠ΈΔ
    0QFO4$
    w εϚʔτΧʔυؔ܎ͷϢʔςΟϦςΟɾϥΠϒϥϦ
    w NBD04Ͱ͸CSFXͰΠϯετʔϧՄೳ
    IUUQTHJUIVCDPN0QFO4$0QFO4$

    View Slide

  23. $ opensc-tool -s 00:A4:04:00:07:F0:39:41:48:14:81:00


    Using reader with a card: ACS ACR1252 Dual Reader


    Sending: 00 A4 04 00 07 F0 39 41 48 14 81 00


    Received (SW1=0x90, SW2=0x00)
    3FDFJWFEʹଓ͍ͯɺϓϩάϥϜଆͰࢦఆͨ͠஋ʢY YʣΛड͚औΔ͜ͱ
    "OESPJE4UVEJPͷ-PH$BUʹ"͔Β࢝·ΔόΠτ͕දࣔ͞Ε͍ͯΔͷΛ֬ೝ͢Δ

    View Slide

  24. )PTU"QEV4FSWJDFͷ࣮૷
    Ϧʔμʔ͕ૹ৴ͨ͠಺༰͸processCommandApdu ͷҾ਺commandApdu ͱͯ͠ɺ
    όΠτ഑ྻͰड͚औΔ
    ໭Γ஋ͷόΠτ഑ྻ͸ɺϨεϙϯεͱͯ͠Ϧʔμʔଆʹૹ৴͞ΕΔ

    Ϧʔμʔ "OESPJE୺຤
    ιϑτ΢ΣΞ ΞϓϦʢ)$&ʣ
    όΠτ഑ྻ
    όΠτ഑ྻ
    /'$

    View Slide

  25. "HFOEB
    εϚʔτΧʔυͱ/'$
    )PTUCBTFE$BSE&NVMBUJPOʢ)$&ʣ
    )$&Λ࣮૷͢Δ
    εϚʔτΧʔυΛࢧ͑Δن֨
    )$&ͷམͱ݀͠
    ·ͱΊ

    View Slide

  26. $ opensc-tool -s 00:A4:04:00:07:F0:39:41:48:14:81:00


    Using reader with a card: ACS ACR1252 Dual Reader


    Sending: 00 A4 04 00 07 F0 39 41 48 14 81 00


    Received (SW1=0x90, SW2=0x00)


    android:description="@string/hce_service_description"


    android:requireDeviceUnlock="false">




    android:category="other"


    android:description="@string/aid_description">









    ૹ৴಺༰Λৄ͘͠ݟΔ

    View Slide

  27. "1%6 "QQMJDBUJPO1SPUPDPM%BUB6OJU

    00:A4:04:00:07:F0:39:41:48:14:81:00
    */4USVDUJPOCZUF໋ྩ
    $-"TTCZUFΫϥεόΠτ
    1ύϥϝʔλʔ
    1ύϥϝʔλʔ
    -Dσʔλ௕ %BUB

    Y"ˠ4&-&$5
    *40*&$ *EFOUJ
    fi
    DBUJPODBSETŠ*OUFHSBUFEDJSDVJUDBSETŠ1BSU
    0SHBOJ[BUJPO TFDVSJUZBOEDPNNBOETGPSJOUFSDIBOHF

    View Slide

  28. $PNNBOEͱ3FTQPOTF

    Ϧʔμʔ "OESPJE୺຤
    ιϑτ΢ΣΞ ΞϓϦʢ)$&ʣ
    SFTQPOTF"QEV
    DPNNBOE"QEV
    /'$

    View Slide

  29. "*%ʹԠͯ͡ΞϓϦΛબ୒

    Ϧʔμʔ "OESPJE୺຤
    ιϑτ΢ΣΞ ΞϓϦʢ)$&ʣ
    4&-&$5"*%
    ΞϓϦʢ)$&ʣ
    ΞϓϦʢ)$&ʣ

    "OESPJE
    γεςϜ
    બ୒
    /'$

    View Slide

  30. $PNNBOE"1%6
    ύλʔϯ
    $-"]*/4]1]1
    ύλʔϯ
    $-"]*/4]1]1]-F
    ύλʔϯ
    $-"]*/4]1]1]-D]%BUB
    ύλʔϯ
    $-"]*/4]1]1]-D]%BUB]-F
    00:A4:04:00:07:F0:39:41:48:14:81:00
    */4USVDUJPOCZUF໋ྩ
    $-"TTCZUFΫϥεόΠτ
    1ύϥϝʔλʔ
    1ύϥϝʔλʔ
    -Dσʔλ௕ %BUB

    View Slide

  31. 3FTQPOTF"1%6
    <%"5">]48]48

    View Slide

  32. 4UBUVT8PSE
    IUUQTXXXFGUMBCDPNLOPXMFEHFCBTFDPNQMFUFMJTUPGBQEVSFTQPOTFT

    48 48 ҙຯ
    90 "00" ੒ޭ
    61 xx ੒ޭɻ࢒ΓxxόΠτͷϨεϙϯε͕͋Δ
    63 Cx PINর߹ࣦഊɻ࢒ΓࢼߦՄೳճ਺xճ
    69 82 PIN͕র߹͞Ε͍ͯͳ͍
    69 83
    ϒϩοΫ͞Ε͍ͯΔʢPINࢼߦՄೳճ਺Λ௒
    աͨ͠
    6A 82
    αϙʔτ͍ͯ͠ͳ͍ϑΝΠϧɾΞϓϦέʔ
    γϣϯ

    View Slide

  33. ͞·͟·ͳ*OTUSVDUJPO
    4&-&$5
    3&"%#*/"3:
    (&5%"5"
    165%"5"
    7&3*':
    $0.165&%*(*5"-4*(/"563&
    *40*&$*EFOUJ
    fi
    DBUJPODBSETŠ*OUFHSBUFEDJSDVJUDBSETŠ1BSU

    $PNNBOETBOENFDIBOJTNTGPSTFDVSJUZPQFSBUJPOT
    ͦͷଞɺΞϓϨοτݻ༗ͷ*OTUSVDUJPO΋ଘࡏ͢Δ

    View Slide

  34. 3FBE#JOBSZΛ࣮૷͢Δ
    CLA: 0x00


    INS: 0xB0


    P1: 0x00


    P2: 0x00


    Le: 0x00


    $ opensc-tool \


    -s 00:A4:04:00:07:F0:39:41:48:14:81:00 \


    -s 00:B0:00:00:00

    View Slide

  35. 3FBE#JOBSZΛ࣮૷͢Δ
    ύλʔϯ
    $-"]*/4]1]1
    ύλʔϯ
    $-"]*/4]1]1]-F
    ύλʔϯ
    $-"]*/4]1]1]-D]%BUB
    ύλʔϯ
    $-"]*/4]1]1]-D]%BUB]-F
    00:B0:00:00:00
    */4USVDUJPODPEF໋ྩ
    $-"TTΫϥεόΠτ
    1ύϥϝʔλʔ
    1ύϥϝʔλʔ
    -Fظ଴͢Δσʔλ௕

    View Slide

  36. "1%6ͷΤϯίʔμʔɾσίʔμʔ
    "OESPJEϓϥοτϑΥʔϜʹ͸༻ҙ͞Ε͍ͯͳ͍
    w 4FDVSF&MFNFOUΞϓϦͷதʹΫϥεͱͯ͠͸ଘࡏ͢Δ
    w IUUQTBOESPJEHPPHMFTPVSDFDPNQMBUGPSNQBDLBHFTBQQT4FDVSF&MFNFOUSFGTIFBET
    NBJOTSDDPNBOESPJETF

    "1%6ΛऔΓѻ͏ϥΠϒϥϦΛ࡞੒
    IUUQTHJUIVCDPNLFJKJKBWBDBSEQSBDUJDFUSFFNBJOBOESPJEBQQBQEV

    View Slide

  37. "1%6ͷύʔεͱ3FBE#JOBSZͷ࣮૷
    val apdu = ApduCommand.readFrom(commandApdu, 0)


    val cla = apdu.header.cla.toUnsignedInt()


    val ins = apdu.header.ins.toUnsignedInt()


    Log.d(TAG, "apdu: cla:$cla, ins:$ins")


    val response = when (ins) {


    0xA4 -> STATUS_WORD_SUCCESS


    0xB0 -> ByteArray(256) { it.toByte() }.also {


    it[it.lastIndex] = "X".toByteArray().first()


    } + STATUS_WORD_SUCCESS


    else -> STATUS_WORD_INS_NOT_SUPPORTED_OR_INVALID


    }


    return response

    View Slide

  38. ࣮ߦ
    Using reader with a card: ACS ACR1252 Dual Reader


    Sending: 00 A4 04 00 07 F0 39 41 48 14 81 00


    Received (SW1=0x90, SW2=0x00)


    Sending: 00 B0 00 00 00


    Received (SW1=0x90, SW2=0x00):


    00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................


    10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................


    20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./


    30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>?


    40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO


    50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_


    60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno


    70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F pqrstuvwxyz{|}~.


    80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F ................


    90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F ................


    A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF ................


    B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ................


    C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF ................


    D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF ................


    E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF ................


    F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD 58 ..............X

    $ opensc-tool \


    -s 00:A4:04:00:07:F0:39:41:48:14:81:00 \


    -s 00:B0:00:00:00

    View Slide

  39. ඇಉظͰ݁ՌΛฦ͢
    private val job = Job()


    private val coroutineScope = CoroutineScope(Dispatchers.IO + job)


    override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray? {


    // লུ


    coroutineScope.launch {


    delay(1000)


    sendResponseApdu(response)


    }


    return null


    }


    override fun onDestroy() {


    super.onDestroy()


    job.cancel()


    }

    View Slide

  40. ࣮ࡍͷ࿦ཧϑΝΠϧߏ੒

    ӡస໔ڐূٴͼӡస໔ڐূ࡞੒γεςϜ౳࢓༷ॻʢ࢓༷ॻόʔδϣϯ൪߸ɿʣ
    IUUQTXXXOQBHPKQMBXTOPUJ
    fi
    DBUJPOLPVUVVNFOLZPNFOLZP@QEG

    View Slide

  41. ࣮ࡍͷ࿦ཧϑΝΠϧߏ੒
    'VODUJPOBM4QFDJ
    fi
    DBUJPOPGUIF0QFO1(1BQQMJDBUJPOPO*404NBSU$BSE0QFSBUJOH4ZTUFNT
    IUUQTHOVQHPSHGUQTQFDT0QFO1(1TNBSUDBSEBQQMJDBUJPOQEG

    View Slide

  42. σʔλϑΥʔϚοτʢ5-75BH-FOHUI7BMVFʣ
    *40*&$
    *OGPSNBUJPOUFDIOPMPHZŠ"4/FODPEJOHSVMFTŠ1BSU4QFDJ
    fi
    DBUJPOPG#BTJD&ODPEJOH3VMFT #&3

    $BOPOJDBM&ODPEJOH3VMFT $&3
    BOE%JTUJOHVJTIFE&ODPEJOH3VMFT %&3

    6E:05:00:01:02:03:04
    5BH 5ZQF

    -FOHUI 7BMVF

    View Slide

  43. 5-7ͷύλʔϯ
    5F:72:05:00:01:02:03:04
    6E:81:C0:00:01:02:03:04 .. BF

    5BHͱ-FOHIU͸όΠτͱ͸ݶΒͳ͍
    6E:08:


    5F:72:05:00:01:02:03:04
    ೖΕࢠͷߏ଄͕͋Γ͏Δ

    View Slide

  44. 5-7ͷΤϯίʔμʔɾσίʔμʔ
    "OESPJEϓϥοτϑΥʔϜʹ͸༻ҙ͞Ε͍ͯͳ͍
    w "4/ͳͲҰ෦͸#PVODZ$BTUMFͰରԠՄೳ

    5-7ΤϯίʔμʔɾσίʔμʔͷϥΠϒϥϦΛ࡞੒
    IUUQTHJUIVCDPNLFJKJUMWLTQ

    View Slide

  45. "HFOEB
    εϚʔτΧʔυͱ/'$
    )PTUCBTFE$BSE&NVMBUJPOʢ)$&ʣ
    )$&Λ࣮૷͢Δ
    εϚʔτΧʔυΛࢧ͑Δن֨
    )$&ͷམͱ݀͠
    ·ͱΊ

    View Slide

  46. ૺ۰ͨ͠໰୊
    )$&ͷϨεϙϯεΛϦʔμʔଆ͕ਖ਼͘͠ॲཧ͠ͳ͍έʔε͕ൃੜ
    Ϧʔμʔଆͷιϑτ΢ΣΞ࣮૷ʹ͸ৄ͘͠ͳ͍
    ࠶ݱੑΛௐ͍ࠪͯ͘͠ͱɺϨεϙϯε͕CZUFTΛ௒͑ͨ͋ͨΓͰൃੜ͢Δ͜ͱ͕Θ
    ͔ͬͨ

    View Slide

  47. CZUFTΛ௒͑Δσʔλͷૹड৴
    )PTU"QEV4FSWJDF͸ɺCZUFTΛ௒͑ΔσʔλΛϨεϙϯεͱͯ͠ฦ͢͜ͱ͕Ͱ͖
    Δ
    ଞͷεϚʔτΧʔυͰ͸໰୊ͳ͘ॲཧ͍ͯ͠Δ΋ͷ΋͋ΔͷͰɺϦʔμʔ΍ιϑτ΢Σ
    Ξ΋ɺCZUFTΛ௒͑ΔσʔλΛड͚औΔ͜ͱ͸Ͱ͖Δ

    View Slide

  48. Ϧʔμʔଆ͔Βݟͨ"OESPJE୺຤

    Ϧʔμʔʢ͓Αͼιϑτ΢ΣΞʣଆ͕ɺ௨৴૬खͷ"OESPJE୺຤͕CZUFTΛ௒͑Δ
    σʔλΛૹड৴͢Δ͜ͱΛೝ͍ࣝͯ͠Δ͔ʁ
    Ϧʔμʔଆ͸λονͨ͠ͱ͖ʹɺΧʔυ͕ૹ৴͢Δ"53ʢ"OTXFS5P3FTFUʣ΍ɺ
    4FMFDUͨ͠ͱ͖ͷ"54ʢ"OTXFS5P4FMFDUʣΛݟ͍ͯΔՄೳੑ͕͋Δ
    $ opensc-tool --atr


    Using reader with a card: ACS ACR1252 Dual Reader


    3b:88:80:01:00:00:00:00:80:81:71:00:79

    View Slide

  49. ͞·͟·ͳσόΠεͷ"53
    YubiKey 5 NFC


    3b:8d:80:01:80:73:c0:21:c0:57:59:75:62:69:4b:65:79:f9


    Pixel 6a


    3b:88:80:01:00:00:00:00:80:81:71:00:79


    Pixel 7a


    3b:88:80:01:00:00:00:00:80:81:75:00:7d

    View Slide

  50. IUUQTTNBSUDBSEBUSBQEVGSQBSTF "53CEDDCG

    View Slide

  51. ֦ு-D-FϑΟʔϧυ
    "1%6$PNNBOEͷ-D-FϑΟʔϧυ͸όΠτͳͷͰɺCZUFT·Ͱ͔͠දݱͰ͖
    ͳ͍
    ֦ு-D-F͸ͦΕͧΕΛόΠτʹ֦ு͢Δ͜ͱͰCZUFTҎ্ɺ CZUFT·Ͱ
    දݱͰ͖Δ
    00:B0:00:00:FF
    -F૝ఆ͢Δσʔλ௕

    ''
    00:B0:00:00:00:01:00
    ֦ு-F૝ఆ͢Δσʔλ௕

    ''''

    View Slide

  52. IUUQTTNBSUDBSEBUSBQEVGSQBSTF "53C

    View Slide

  53. "53ʢ"54ʣ͸มߋͰ͖ͳ͍
    IUUQTEFWFMPQFSBOESPJEDPNHVJEFUPQJDTDPOOFDUJWJUZOGDIDF IMKB*TP%FQ"DU

    View Slide

  54. ରࡦ
    )$&ΞϓϦ͸ɺCZUFTΛ௒͑Δ௕͞ͷσʔλΛૹ৴͠ͳ͍
    ‎ ࠷େCZUFTͷνϟϯΫʹ෼ׂͯ͠ૹ৴͢Δ
    Ϧʔμʔଆͷιϑτ΢ΣΞͰ΋ɺΧʔυଆ͕CZUFTΛ௒͑ΔσʔλΛऔΓѻ͑ͳ͍
    ͜ͱΛલఏʹ։ൃ͢Δ
    ‎ ϦʔμʔͱΧʔυͷ૊Έ߹Θͤ͸جຊతʹ͸੍໿Ͱ͖ͳ͍

    View Slide

  55. ๣ड
    /'$͸ແઢ௨৴ͳͷͰ๣डՄೳ
    ‎ ਺ສԁఔ౓ͷػثͰ௨৴಺༰Λ๣डɺه࿥Ͱ͖Δ
    ϦʔμʔɺΧʔυؒͰࣗಈతʹ҉߸Խ͸͞Εͳ͍
    ‎ ҉߸Խͷํ๏ͱͯ͠4FDVSF.FTTBHJOH͕͋Δ
    ‎ 4FDVSF.FTTBHJOH͸ݸผʹ࣮૷͢Δඞཁ͕͋ΓɺΧʔυଆ͚ͩͰͳ͘Ϧʔμʔ
    ଆ΋ରԠ͍ͯ͠Δඞཁ͕͋Δ

    View Slide

  56. ๣ड΁ͷରࡦ
    /'$Λ௨ͯ͡΍ΓͱΓ͢Δ৘ใ͸ɺ͢΂ͯ๣ड͞ΕΔલఏͰઃܭ͢Δ
    ‎ Ϧʔμʔଆ͔Β1*/ΛૹΔͱ͖͸ฏจͰૹ৴͠ͳ͍
    ‎ ϦʔμʔଆͰ1*/Λೖྗ͠ͳ͍ʢΧʔυʹૹ৴͠ͳ͍ʣ
    ‎ εϚʔτϑΥϯʢΧʔυʣଆͰೝূΛٻΊΔͳͲɺεϚʔτϑΥϯͷಛੑΛ׆͔
    ͨ͠ηΩϡϦςΟΛݕ౼͢Δ

    View Slide

  57. ෳ੡
    ๣डͱ૊Έ߹ΘͤΔ͜ͱͰɺଞͷΞϓϦ͕)$&ͷԠ౴಺༰Λ׬શʹ໛฿ͯ͠Ϋϩʔϯ
    ΧʔυʢΞϓϦʣΛ࡞੒͢Δ͜ͱ͕ٕज़తʹՄೳ
    ‎ Ϧʔμʔଆ͸ɺࣗ෼ͷ௨৴૬ख͕ෳ੡͞Εͨ΋ͷͰͳ͍͔൑ఆ͢Δඞཁ͕͋Δ

    View Slide

  58. Ϧʔμʔ "OESPJE୺຤
    "OESPJE,FZ4UPSF
    ιϑτ΢ΣΞ
    ిࢠॺ໊ʹΑΔෳ੡ݕ஌
    ΞϓϦʢ)$&ʣ
    ެ։ݤ
    ൿີݤ
    ެ։ݤ
    ॳظઃఆϦΫΤετ

    ެ։ݤอଘ
    ݤϖΞੜ੒
    ݤϖΞੜ੒ϦΫΤετ
    /'$

    View Slide

  59. Ϧʔμʔ "OESPJE୺຤
    "OESPJE,FZ4UPSF
    ιϑτ΢ΣΞ
    ిࢠॺ໊ʹΑΔෳ੡ݕ஌
    ΞϓϦʢ)$&ʣ
    ॺ໊஋
    ൿີݤ
    ެ։ݤ
    ॺ໊ϦΫΤετ
    ެ։ݤ

    ॺ໊ͷݕূ
    ిࢠॺ໊
    ॺ໊ϦΫΤετ
    /'$

    View Slide

  60. Ϧʔμʔͱͷ૬ੑ໰୊
    )$&ͷΞϓϦΛ1JYFM8BUDIʹΠϯετʔϧͨ͠ɻ
    40/:ͷ1B4P3J3$44ʢۀ຿༻ʣͰ͸ಡΈऔΔ͜ͱ͕Ͱ͖Δ͕ɺ

    "EWBODFE$BSE4ZTUFNTͷ"$36Ͱ͸ਖ਼͘͠ಡΈऔΔ͜ͱ͕Ͱ͖ͳ͍έʔε
    ͕͋ͬͨʢݫີʹݴ͏ͱճʹճ͘Β͍ͷ੒ޭ཰ʣ

    View Slide

  61. ϦʔμʔʹΑͬͯҟͳΔ௨৴ํࣜ
    ֬ೝͨ͠ͱ͜Ζɺ
    40/:ͷ1B4P3J3$44ʢۀ຿༻ʣ͸/'$5ZQF"Ͱɺ

    "EWBODFE$BSE4ZTUFNTͷ"$36͸/'$5ZQF#ͰɺͦΕͧΕ௨৴͍ͯ͠
    ͨʢ1JYFM8BUDIʹݶΒͣɺςετͨ͠୺຤͢΂ͯͰಉ͡ʣɻ
    "$36͸ɺ1JYFMBͳͲͷܞଳ୺຤ͱ͸໰୊ͳ͘௨৴Ͱ͖͍ͯΔɻ

    1JYFM8BUDIଆ͕ɺ5ZQF#Ͱͷ௨৴ʹ՝୊͕͋ΔՄೳੑ͕͋Δɻ

    View Slide

  62. ΞϓϦଆ͔ΒͰ͖Δ͜ͱ͸ͳ͍
    ୺຤ɾϦʔμʔͷ૬ੑ͕ൃੜ͍ͯ͠Δ͜ͱ͸ɺΞϓϦ͔Β஌Δ͜ͱ͕Ͱ͖ͳ͍
    ‎ ͦ΋ͦ΋)PTU"QEV4FSWJDFʹ౸ୡ͠ͳ͍ͷͰɺϦʔμʔ͕௨৴ΛࢼΈ͍ͯΔ͜
    ͱΛΞϓϦ͸ݕ஌Ͱ͖ͳ͍
    5ZQF"ͰΞΫηε͢Δ͔ɺ5ZQF#ͰΞΫηε͢Δ͔͸Ϧʔμʔґଘ

    View Slide

  63. Ϧʔμʔͱͷ૬ੑ໰୊ͷରԠ
    ୺຤Λ(PPHMF1MBZͷ഑৴ର৅͔Βআ֎͢Δʁ
    ‎ Ϧʔμʔͱͷ૊Έ߹Θͤͷ໰୊
    ಈ࡞อূΛ͢Δ୺຤ͱϦʔμʔͷ૊Έ߹ΘͤΛެද͢Δʁ
    ‎ ύλʔϯരൃ
    ΞϓϦͷ࠷ॳʹνϡʔτϦΞϧΛ༻ҙɻͦͷաఔͰ୺຤ΛϦʔμʔͰಡΈऔͬͯ΋Β͏ɻ

    Ұఆ࣌ؒ੒ޭ͠ͳ͚Ε͹ࣦഊͱݟ၏ͯ͠૬ੑ໰୊ΛҊ಺͢Δ
    ‎ ࠜຊతʹ͸ղܾ͍ͯ͠ͳ͍͚Ͳɺ͍͟࢖͓͏ͱͯ͠μϝΑΓ͸͍͍

    View Slide

  64. "HFOEB
    εϚʔτΧʔυͱ/'$
    )PTUCBTFE$BSE&NVMBUJPOʢ)$&ʣ
    )$&Λ࣮૷͢Δ
    εϚʔτΧʔυΛࢧ͑Δن֨
    )$&ͷམͱ݀͠
    ·ͱΊ

    View Slide

  65. )$&׆༻΁ͷظ଴ͱ՝୊
    )PTUCBTFE$BSE&NVMBUJPOʢ)$&ʣΛ࢖͏ͱɺ"OESPJEεϚʔτϑΥϯΛߴػೳͳεϚʔτ
    Χʔυͱͯ͠ৼΔ෣ΘͤΔ͜ͱ͕Ͱ͖Δɻ)$&ͷ׆༻ʹΑΓɺܾࡁͷΈͳΒͣɺެతͳ਎෼ূ໌ͱ͠
    ͯͷϞόΠϧӡస໔ڐূͳͲ༻్ͷ֦େ͕ظ଴Ͱ͖Δɻ
    ͔͠͠ͳ͕Βɺ)$&ʹ͸গͳ͔Βͣ՝୊͕͋Δɻ·ͣɺ"OESPJEͷ)$&͸جຊతͳػೳͷΈఏڙ͠
    ͍ͯΔɻͦͷͨΊଟ͘ͷ෦෼Λ։ൃऀࣗ਎͕࣮૷͢Δඞཁ͕͋Γɺ։ൃෛՙ͕ߴ͍ɻ
    ࣍ʹɺηΩϡϦςΟͷݕ౼͕ෆे෼Ͱ͋ͬͨ৔߹ɺ๣डʹΑΔ৘ใ࿙ӮɺΫϩʔϯΧʔυͷ࡞੒ͳ
    ͲɺγεςϜͷ҆શੑʹॏେͳӨڹΛ΋ͨΒ͢Մೳੑ͕͋Δɻ·ͨɺΞϓϦ͔ΒઃఆͰ͖ͳ͍߲໨͕
    ଟ͘ɺ୺຤ͱϦʔμʔͱͷ૊Έ߹ΘͤͰಈ࡞͠ͳ͍ͳͲɺΞϓϦͰ͸ղܾ͕೉͍͠՝୊΋͋Δɻ)$&
    ͷಋೖʹ͋ͨͬͯ͸ɺϢʔβʔʹͲͷΑ͏ʹαϙʔτ͢Δ͔΋े෼ʹݕ౼ɾ४උ͢Δඞཁ͕͋Δɻ

    View Slide

  66. ຊࢿྉ͸༗ࢁܓೋͷஶ࡞෺Ͱ͢ɻຊࢿྉͷશ෦ɺ·ͨ͸Ұ෦ʹ͍ͭͯɺஶ࡞ऀ͔ΒจॻʹΑΔڐ୚Λಘͣʹෳ੡͢Δ͜ͱ͸ې͡ΒΕ͍ͯ·͢ɻ
    ֤੡඼໊ɾϒϥϯυ໊ɺձ໊ࣾͳͲ͸ɺҰൠʹ֤ࣾͷ঎ඪ·ͨ͸ొ࿥঎ඪͰ͢ɻຊࢿྉதͰ͸ɺ˜ɺšɺäΛׂѪ͍ͯ͠·͢ɻ
    ຊࢿྉͷ಺༰͸ɺൃදऀݸਓͷݟղͰ͋Γɺॴଐ·ͨ͸ؔ༩͢Δ૊৫Λ୅ද͢Δ΋ͷͰ͸͋Γ·ͤΜɻ
    ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

    View Slide

  67. ࢀߟ
    w ੖ߞӍಡϚΠφϯόʔΧʔυͱ"1%6Ͱ௨৴ͯ͠ॺ໊σʔλ࡞੒
    w IUUQTUFYFHJUIVCJPCMPHQSPUPDPMKQLJNZOVNCFSDBSEXJUIBQEV
    w 4NBSU$BSE(VZ
    w IUUQTTNBSUDBSEHVZIBUFOBCMPHKQ
    w &5'MBC,OPXMFEHFCBTF
    w IUUQTXXXFGUMBCDPNLOPXMFEHFCBTF
    w ࡏཹΧʔυ౳ಡΈऔΓ࢓༷ॻʢҰൠެ։༻ʣW
    w IUUQTXXXNPKHPKQJTBDPOUFOUQEG

    View Slide

  68. ࢀߟ
    w ӡస໔ڐূٴͼӡస໔ڐূ࡞੒γεςϜ౳࢓༷ॻʢ࢓༷ॻόʔδϣϯ൪߸ɿ

    w IUUQTXXXOQBHPKQMBXTOPUJ
    fi
    DBUJPOLPVUVVNFOLZPNFOLZP@QEG
    w 'VODUJPOBM4QFDJ
    fi
    DBUJPOPGUIF0QFO1(1BQQMJDBUJPOPO*404NBSU$BSE
    0QFSBUJOH4ZTUFNT
    w IUUQTHOVQHPSHGUQTQFDT0QFO1(1TNBSUDBSEBQQMJDBUJPOQEG
    w *$"0%PD.BDIJOF3FBEBCMF5SBWFM%PDVNFOU
    w IUUQTXXXJDBPJOUQVCMJDBUJPOTQBHFTQVCMJDBUJPOBTQY EPDOVN

    View Slide