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

ABC's of CWT - idcon vol.24

ritou
June 08, 2018

ABC's of CWT - idcon vol.24

#idcon vol.24 ~ #fidcon 再び の発表で使用したスライドです。
https://idcon.connpass.com/event/84839/

ritou

June 08, 2018
Tweet

More Decks by ritou

Other Decks in Technology

Transcript

  1. CBOR The Concise Binary Object Representation (CBOR) is a data

    format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. コードサイズ > メッセージサイズ
  2. 表現可能なデータ ✘ 整数 (unsigned, negative) ✘ バイナリ / テキスト ✘

    Array / Map ✘ 浮動小数点数 / 多倍長整数 ✘ true / false / null / undefined ✘ 日付 / 日時
  3. 整数 # 0 (unsigned int8) 00 # unsigned(0) # 23

    17 # unsigned(23) # 24 18 18 # unsigned(24) # 255 18 FF # unsigned(255) ✘ 0 ~ 23 までは そのまま1 バイトで表現 ✘ 24 ~ 255 までは先頭 18(<<24>>) の後に “18 ~ FF” が続く
  4. 整数 # 256 (unsigned int16) 19 0100 # unsigned(256) #

    65535 19 FFFF # unsigned(65535) # 65536 (unsigned int32) 1A 00010000 # unsigned(65536) # 4294967296 (unsigned int64) 1B 0000000100000000 # unsigned(4294967296) # 18446744073709551615 1B FFFFFFFFFFFFFFFF # unsigned(18446744073709551615) ✘ 256 ~ 65535 は先頭 19(<<25>>) の後に“0100 ~ FFFF” が続く
  5. バイナリ #h'6162636465' 45 # bytes(5) 6162636465 # "abcde" #h'6162636465666768696A6B6C6D6E6F707172737475767778' 58

    18 # bytes(24) 6162636465666768696A6B6C6D6E6F707172737475767778 # "abcdefghijklmnopqrstuvwx" ✘ バイナリを表現する先頭 バイトは 40~ ✘ 長さが5なので先頭は 40 + 5 ✘ 長さが24なので先頭は40 + 18, その後ろに18
  6. テキスト # "abcde" 65 # text(5) 6162636465 # "abcde" #

    "abcdefghijklmnopqrstuvwx" 78 18 # text(24) 6162636465666768696A6B6C6D6E6F707172737475767778 # "abcdefghijklmnopqrstuvwx" ✘ バイナリを表現する先頭 バイトは 60~ ✘ 長さが5なので先頭は 60 + 5 ✘ 長さが24なので先頭は60 + 18, その後ろに18
  7. Array / Map # [1, "a"] 82 # array(2) 01

    # unsigned(1) 61 # text(1) 61 # "a" # {1:"a"} A1 # map(1) 01 # unsigned(1) 61 # text(1) 61 # "a"
  8. 不定長 # [_ 1, "a"] 9F # array(*) 01 #

    unsigned(1) 61 # text(1) 61 # "a" FF # primitive(*) # {_ 1:"a"} BF # map(*) 01 # unsigned(1) 61 # text(1) 61 # "a" FF # primitive(*)
  9. value CBOR JSON [] 1 2 [1, 2, 3, 4]

    5 9 [“a”, “b”, “c”, “d”] 9 17 {} 1 2 {1:2, 3:4} 5 13 {“a”:”b”, “c”:”d”} 9 17 CBOR vs JSON
  10. value CBOR JSON 0 1 1 23 1 2 18446744073709551615

    9 20 18446744073709551616 11 20 "12345678901234567890123" 24 25 "123456789012345678901234" 26 26 h’01020304’ 5 10(Base64 encoded) 32bytes binary 34 46(Base64 encoded)
  11. COSE vs JOSE COSE 内容 JOSE Signing 署名つきオブジェクト JWS(alg=RSXXX, ESXXX)

    Encryption 暗号化されたオブジェクト JWE MAC MAC値つきオブジェクト JWS(alg=HSXXX) Algorithms 使用するアルゴリズム JWA Key 鍵の表現 JWK
  12. Basic COSE Object 全てのCOSEメッセージはCBOR配列形式、最初の3要素は 1. バイナリ文字列で表現された protected header の集合. 暗

    号処理に関わるパラメータ 2. Map で表現された unprotected header の集合 3. 平文(Signing, MAC)もしくは暗号化された(Encryption)メッ セージの内容
  13. Signing Objects 署名つきオブジェクト ✘ COSE_Sign : 1つのコンテンツに対する複数の署名を含む 形式。 JOSE で言う所の

    JWS JSON Serialization ✘ COSE_Sign1 : 1つのコンテンツに対して1つの署名を含む形 式。 JOSE で言う所の JWS Compact Serialization
  14. COSE_Sign1 # COSE_Sign1 用の CBOR Tag は 18 COSE_Sign1_Tagged =

    #6.18(COSE_Sign1) # ヘッダー、ペイロード、署名から構成される COSE_Sign1 = [ Headers, payload : bstr / nil, signature : bstr ]
  15. Sample 18( [ / protected / h' a10126' / {

    \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / payload / 'This is the content.', / signature / h'8eb33e4ca31d1c465ab05aac34cc6b23d58fef5c083106c4d25a91aef0b0117e2af9a291aa32e14ab834 dc56ed2a223444547e01f11d3b0916e5a4c345cacb36'])
  16. Signature Algorithms WebAuthn で追加されたもの ✘ RS256, RS384, RS512 : RSASSA-PKCS1-v1_5

    w/ SHA-XXX ✘ ED256 : TPM_ECC_BN_P256 curve w/ SHA-256 ✘ ED512 : ECC_BN_ISOP512 curve ✘ RS1 : RSASSA-PKCS1-v1_5 w/ SHA-1
  17. Key Object Parameters COSE_Key = { 1 => tstr /

    int, ; kty ? 2 => bstr, ; kid ? 3 => tstr / int, ; alg ? 4 => [+ (tstr / int) ], ; key_ops ? 5 => bstr, ; Base IV * label => values }
  18. JWT (RFC 7519) Registered Claims Name Value Type iss text

    string sub text string aud text string(array of text string) exp integer of floating-point number nbf integer of floating-point number iat integer of floating-point number jti text string
  19. CWT Registered Claims Name Value Type Key iss text string

    1 sub text string 2 aud text string(array of text string) 3 exp integer of floating-point number 4 nbf integer of floating-point number 5 iat integer of floating-point number 6 cti byte string 7
  20. Example CWT Claims Set { / iss / 1: "coap://as.example.com",

    / sub / 2: "erikw", / aud / 3: "coap://light.example.com", / exp / 4: 1444064944, / nbf / 5: 1443944944, / iat / 6: 1443944944, / cti / 7: h'0b71' }
  21. A7 # map(7) 01 # unsigned(1) 75 # text(21) 636F61703A2F2F61732E6578616D706C652E636F6D

    # "coap://as.example.com" 02 # unsigned(2) 65 # text(5) 6572696B77 # "erikw" 03 # unsigned(3) 78 18 # text(24) 636F61703A2F2F6C696768742E6578616D706C652E636F6D # "coap://light.example.com" 04 # unsigned(4) 1A 5612AEB0 # unsigned(1444064944) 05 # unsigned(5) 1A 5610D9F0 # unsigned(1443944944) 06 # unsigned(6) 1A 5610D9F0 # unsigned(1443944944) 07 # unsigned(7) 42 # bytes(2) 0B71 # "\vq"            -> 80バイト
  22. CWT CBOR Tag / CWT CBOR tag / 61( /

    COSE_Mac0 CBOR tag / 17( / COSE_Mac0 object / ) ) ->「61 から始まるのはCWTで次に来るのがCOSEのTag」