2024年9月20日金曜日

MVPアワードでもらったOpenBadgeを覗いてみる

こんにちは、富士榮です。

MicrosoftからMVP(Most Valuable Professional)というアワードをいただき初めて今年で15年目、という話を前に書きましたが、最近この手のアワードやIT系の資格試験などではOpenBadge形式で資格証明がもらえることがあります。

これまで何度かイベントではOpenBadgeの中身について話をしてきましたが、要するにPNGやSVGファイルの中身(PNGならiTXt領域、SVGならopenbadge属性)へJSON-LDで記述されたクレデンシャルの情報を埋め込んでいます(OpenBadge 2.0、Hosted形式の場合)。

この埋め込み作業のことをBake(ベイク)と言い、こちらに技術仕様が公開されています。

https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/baking/index.html


なお、最近はOpenBadge 3.0がW3C Verifiable Credentials Data Model 2.0を使って定義されようとしています。(Finalizeと言いつつVCDM2.0がFinalにならないのでどうするつもりなんだ、という話もありますが)

OpenBadgeにはHosted型とSigned型の2種類が定義されており、これまでは検証時に発行者のURLへ問い合わせを行うHosted型が中心でしたが、OpenBadge 3.0からはVerifiable Credentialsを利用することでSigned型(バッジ単体で検証ができる)が中心になってくると思われます。


ただ、現状はMVPバッジはCredly社(IT系の資格の受験をするときにお世話になった方も多いであろうピアソン社を数年前に買収した会社で民間の資格証明の最大手ですね)が発行するOpenBadge 2.0、Hosted型のバッジです。

こんな感じでCredlyのバッジポータルでバッジの確認やダウンロードができます。



ちなみに実際のOpenBadgeイメージはこちらから取得できますので、こうやってブログやWebサイトで他の方へ提示(配布)することもできるわけです。




さて、では中身を覗いてみましょう。

先ほど書いた通りiTXt領域にJSON-LD形式で埋め込まれているわけですが、IMS Globalがこちらで検証サイトを公開しているので、こちらを使いましょう。

https://openbadgesvalidator.imsglobal.org/

このサイトを使って取り出したOpenBadgeがこちらです。

{
    "input": {
        "value": "https://www.credly.com/api/v1/obi/v2/badge_assertions/8793fdbf-80a5-4240-977e-12ac45574df3",
        "input_type": "url"
    },
    "graph": [
        {
            "@context": "https://w3id.org/openbadges/v2",
            "type": "Assertion",
            "issuedOn": "2024-09-17T00:00:00.000Z",
            "recipient": {
                "type": "email",
                "identity": "sha256$071281e466032326ffe4c3238545d31970b2b61d75fae181a283ac0aace09264",
                "hashed": true
            },
            "badge": "https://www.credly.com/api/v1/obi/v2/issuers/214390fb-07bc-4575-80f2-f2c325f71c49/badge_classes/2b797f06-fdd4-4ec7-b13c-e8f79915da0c",
            "verification": {
                "type": "HostedBadge"
            },
            "evidence": [],
            "id": "https://www.credly.com/api/v1/obi/v2/badge_assertions/8793fdbf-80a5-4240-977e-12ac45574df3"
        },
        {
            "@context": "https://w3id.org/openbadges/v2",
            "tags": [
                "Community",
                "Leadership",
                "Technology"
            ],
            "name": "2024 Microsoft Most Valuable Professional (MVP)",
            "image": "https://images.credly.com/images/9e9359a4-fe7e-4e02-8eb0-6c2b7947345a/image.png",
            "alignment": [],
            "criteria": {
                "narrative": "Award: Individuals must have deep knowledge and expertise aligned to a Microsoft product or service or related open-source technologies. Through community work, qualifying applicants should be able to demonstrate their technical expertise. https://mvp.microsoft.com/",
                "id": "https://www.credly.com/org/microsoft-student-programs/badge/2024-microsoft-most-valuable-professional-mvp"
            },
            "id": "https://www.credly.com/api/v1/obi/v2/issuers/214390fb-07bc-4575-80f2-f2c325f71c49/badge_classes/2b797f06-fdd4-4ec7-b13c-e8f79915da0c",
            "type": "BadgeClass",
            "description": "The Microsoft MVP Program recognizes outstanding members of technical communities for their community participation and willingness to help others. Above all else, it is a people-powered program, made up of individuals whose passionate commitment to innovation has made its dynamic growth possible.",
            "issuer": "https://www.credly.com/api/v1/obi/v2/issuers/214390fb-07bc-4575-80f2-f2c325f71c49"
        },
        {
            "@context": "https://w3id.org/openbadges/v2",
            "type": "Issuer",
            "id": "https://www.credly.com/api/v1/obi/v2/issuers/214390fb-07bc-4575-80f2-f2c325f71c49",
            "name": "Microsoft MVP and Student Ambassadors Communities",
            "image": "https://images.credly.com/images/8f11d73e-9c33-4788-a602-88c761957c90/blob.png",
            "description": "The Microsoft MVP and Student Ambassadors Programs are communities where student experts, technology professionals or industry leaders transform their passions and skills into globally recognized community leadership.",
            "email": "info@credly.com",
            "url": "https://mvp.microsoft.com/"
        }
    ],
    "report": {
        "valid": true,
        "messages": [],
        "warningCount": 0,
        "validationSubject": "https://www.credly.com/api/v1/obi/v2/badge_assertions/8793fdbf-80a5-4240-977e-12ac45574df3",
        "openBadgesVersion": "2.0",
        "errorCount": 0
    }
}

このとおり、IssuerはCredly社となっており、マイクロソフトが直接発行しているわけではないことがわかります。
また、OpenBadgeの特徴としてあくまで資格情報を表現するものとなっていることが挙げられます。何を言っているかというとバッジを提示する人とバッジが指し示す人が一致していることは表現していないということです。(私が他人のバッジを保持して提示することも可能。まぁ単なる画像ファイルですから当然ですね)
そのため、Verifyをする際にバッジを提示する主体とバッジが指し示す主体が一致していることを検証サイト側で行うことが必要となります。

具体的な方法としては、recipientのidentity要素に入っている値(バッジが指し示す主体)が提示してくる主体と同じことを確認することになりますので、提示する際に利用者にメールアドレス(type: emailの場合)を入力させ、
  1. 到達性確認を行うことで提示者が当該メールアドレスに対してアクセスが可能な状態であることを確認する
  2. 到達性確認ができたメールアドレスとバッジを検証URL(発行元。今回のケースだとCredly)へ投げ込む
  3. 検証URL側は自身が管理するsalt値を使って送られてきたメールアドレスの値をSHA256(もしくはMD5)でハッシュ化する
  4. バッジの中にはいっているidentityの値と生成したハッシュ値が同一であることを確認する(提示者はバッジの中を見てもメールアドレスの値がハッシュ化されているため、誰のバッジかわからない。持ち主だけがバッジ発行時のRecipient情報として設定したメールアドレスを知っているので発行対象の主体とバッジの指し示す主体が一致しているであろうことを推測する)
この部分)
            "recipient": {
                "type": "email",
                "identity": "sha256$071281e466032326ffe4c3238545d31970b2b61d75fae181a283ac0aace09264",
                "hashed": true
            },


非常に簡易的な仕組みですが、身分証明に使うわけではありませんしこのくらいのゆるさでもOKってことでしょう。

しかしVCにもVC2.0があったり、SD-JWTがあったりと複雑ですが、こういう形で教育業界でもOpenBadgeのバージョンやアーキテクチャ(Hosted/Signedなど)の混在による混乱もありそうですね。

引き続き見ていきたいと思います。


0 件のコメント: