Skip to content

MS_CBOR

nishi_74322014 edited this page Aug 3, 2026 · 1 revision

CBOR

概要

  • CBOR とは、

    • オブジェクトをバイナリ・シリアライズする仕様
    • JSON データモデルが基礎となる(JSON 互換)

    で、シーボルと読む。

  • 一言でいうと、JSON のバイナリ版

特徴

  • IoT, etc. 向け
  • COSE(MS_COSE.md)メッセージのベース
  • FIDO2の CTAP でも使用される。

経緯

補足(最新化): この見立ては概ねそのとおりになった。 IETF 標準の中で CBOR を採用する仕様が増えている。

  • COSE(RFC 9052 / 9053)— JWTの JOSE に対応する署名・暗号化
  • CWT(RFC 8392)— CBOR 版のトークン(CWT: MS_CWT.md
  • CTAP2FIDO2)— 認証器との通信
  • COSE_Sign1 — ワクチン接種証明書などの電子証明にも使われた

ただし「置き換え」というより棲み分けである。 MessagePack はアプリ内・ゲーム・RPC で依然として使われており、 CBOR は標準化された仕様の中で使われる傾向が強い。

詳細

Format

部分 内容
Major Type が 1 byte で定義
その後、0-n bytes で実際の値が定義

型(Major Type)

  • JSON と比べて型が多い。
  • JSON は、数値型(int, float 含む)、文字列型、真偽値、配列、オブジェクト、Null
  • CBOR は、Major Type と呼ばれ、0 から 7 まで定義されている。
Major type 内容
0 符号なし整数(unsigned integer)。uint8、uint16、uint32、uint64 に分化される big-endian
1 マイナス数値(negative integer)。同上
2 バイト文字列(byte string)。長さは無制限(文字列バイトの指定 or break 文字指定)
3 テキスト文字列(text string)。UTF-8 文字列、長さは無制限
4 配列(array)。長さは無制限(項目数の指定 or break 指定)
5 マップ(map、JSON だと object)。キー・値のペアを列挙
6 拡張用のオプション領域(タグ)。日時型、多倍長整数、固定小数点、base64、正規表現、MIME message
7 浮動小数点(floating-point numbers)。float16、float32、float64、真偽値(Boolean)、Null、Undefined も定義

補足: JSON に対する CBOR の実務的な利点は次の 3 点である。

  • バイナリをそのまま入れられる(Major type 2)。 JSON では Base64 にする必要があり、約 33% 膨らむ。
  • マップのキーが文字列に限定されない(整数キーが使える)。
  • タグ(Major type 6)により、 日時や多倍長整数の意味づけを標準的に表現できる。

一方、マップのキーが文字列以外を取れることは、 JSON へ変換する際に情報が落ちる原因にもなる。

CDDL

  • CDDL: Concise data definition language

  • CBOR のスキーマ定義の標準

    • CBOR 表記規則(CBOR を表現する表記法)
    • JSON データ構造の記述にも使用できる。

目的

  • (G1)CBOR データ構造の全体的な構造の明瞭な記述を提供する。
  • (G2)自由度を CBOR データ形式で表現する柔軟性。
  • (G3)必要に応じてフォーマットの選択を制限する可能性がある[形式]。
  • (G4)共通の CBOR データ型および構造を表現できること。
  • (G5)人と機械が読み書き可能であること。
  • (G6)データフォーマット準拠の自動チェック。
  • (G7)さらなる処理のために CBOR データから特定の要素を抽出する。

ライブラリ

  • PeterO.Cbor(MS_PeterOCbor.md
  • Dahomey.Cbor(MS_DahomeyCbor.md

補足(最新化): .NET には System.Formats.Cbor(.NET 5 以降の標準ライブラリ)が追加されている。 低レベルな CborReader / CborWriter を提供するもので、 オブジェクトの自動マッピングは行わない。 標準仕様(COSE / CWT)を扱う用途にはこちらが適する。

参考

移行メモ(最新化): 元ページは仕様として RFC 7049 を挙げていたが、 RFC 8949(2020 年、STD 94)で置き換えられている。 CDDL も draft ではなく RFC 8610 として発行済みである。


Tags: IT国際標準, プログラミング, 通信技術

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally