Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

doc: COSE -> JWK Mappings

オープン
#7 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
25/100
issue の種類
ドキュメント
明瞭さ
説明が足りない
活発さ
停滞
技術スタック
javascript

調査の方向性

まず、COSE/JWKマッピングテーブルと、リンクされているIANA、RFC、Node WebCrypto、caniuseのリファレンスを確認します。このリポジトリのドキュメントのどこでpasskeyのキータイプを扱っているかを特定し、合意されたモダンおよびレガシーのマッピングを、ブラウザーとNodeのサポート状況とともに文書化します。マッピングと互換性に関する注記が完全で、内部的に一貫していれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Note:

Node WebCrypto Key Gen Example
'use strict';

let Fs = require('node:fs/promises');

async function generateKeyPair(algo) {
  let keyPair = await crypto.subtle.generateKey(algo, true, ['sign', 'verify']);

  let privateKeyAb = await crypto.subtle.exportKey('pkcs8', keyPair.privateKey);
  let privateKeyDER = new Uint8Array(privateKeyAb);
  let privateKeyPath = `./key.${algo.name}.der`.toLowerCase();
  await Fs.writeFile(privateKeyPath, privateKeyDER);

  let publicKeyAb = await crypto.subtle.exportKey('spki', keyPair.publicKey);
  let publicKeyDER = new Uint8Array(publicKeyAb);
  let publicKeyPath = `./pub.${algo.name}.der`.toLowerCase();
  await Fs.writeFile(publicKeyPath, publicKeyDER);

  console.info(`Key pair generated and saved as ${privateKeyPath} and ${publicKeyPath}`);
}

async function main() {
  await generateKeyPair({ name: 'Ed25519' });
  await generateKeyPair({ name: 'ECDSA', namedCurve: 'P-256' });
}

main().catch(function (err) {
  console.error(err.stack);
  process.exit(1);
});

Adapted From https://www.iana.org/assignments/cose/cose.xhtml

OKP (EdDSA / ed25519)
Key Type Name COSE Label Type Description Reference
1 crv -1 int / tstr EC identifier [RFC9053]
1 x -2 bstr Public Key [RFC9053]
1 d -4 bstr Private key [RFC9053]
EC (ECDSA, secp256k1)
Key Type Name COSE Label Type Description Reference
2 crv -1 int / tstr EC identifier [RFC9053]
2 x -2 bstr x-coordinate [RFC9053]
2 y -3 bstr / bool y-coordinate [RFC9053]
Modern Keypairs

These are the key types that are still relevant in 2024+ and will be relevant for the next decade:

let coseMap = {
  "keys": {
    "kty": 1,
    "alg": 3
  },
  "okp": {
    "crv": "-1",
    "x": "-2",
    "d": "-4"
  },
  "ec": {
    "crv": "-1",
    "x": "-2",
    "y": "-3",
    "d": "-4"
  },
  "kty": {
    "1": "OKP",
    "2": "EC"
  },
  "alg": {
    "-47": "ES256K",
    "-8": "EdDSA",
    "-7": "ES256"
  },
  "crv": {
    "1": "P-256",
    "6": "Ed25519",
    "8": "secp256k1"
  }
};
Legacy Keypairs
let coseMap = {
  "keys": {
    "kty": 1,
    "alg": 3
  },
  "okp": {
    "crv": "-1",
    "x": "-2",
    "d": "-4"
  },
  "ec": {
    "crv": "-1",
    "x": "-2",
    "y": "-3",
    "d": "-4"
  },
  "rsa": {
    "n": "-1",
    "e": "-2",
    "d": "-3",
    "p": "-4",
    "q": "-5",
    "dp": "-6",
    "dq": "-7",
    "qi": "-8"
  },
  "kty": {
    "1": "OKP",
    "2": "EC",
    "3": "RSA"
  },
  "alg": {
    "-259": "RS512",
    "-258": "RS384",
    "-257": "RS256",
    "-39": "PS512",
    "-38": "PS384",
    "-37": "PS256",
    "-36": "ES512",
    "-35": "ES384",
    "-47": "ES256K",
    "-8": "EdDSA",
    "-7": "ES256"
  },
  "crv": {
    "1": "P-256",
    "2": "P-384",
    "3": "P-521",
    "6": "Ed25519",
    "8": "secp256k1"
  }
};
RSA (legacy)

RSA's not bad or broken, it's just not efficient.

Key Type Name COSE Label Type Description Reference
3 n -1 bstr RSA modulus n [RFC8230]
3 e -2 bstr RSA public exponent e [RFC8230]
3 d -3 bstr RSA private exponent d [RFC8230]
3 p -4 bstr Prime factor p of n [RFC8230]
3 q -5 bstr Prime factor q of n [RFC8230]
3 dP -6 bstr dP is d mod (p - 1) [RFC8230]
3 dQ -7 bstr dQ is d mod (q - 1) [RFC8230]
3 qInv -8 bstr CRT coefficient q^(-1) mod p [RFC8230]
3 other -9 array Other prime infos, an array [RFC8230]
3 r_i -10 bstr Prime factor r_i of n, where i >= 3 [RFC8230]
3 d_i -11 bstr d_i = d mod (r_i - 1) [RFC8230]
3 t_i -12 bstr CRT coefficient t_i = (r_1 * r_2 * ... * r_(i-1))^(-1) mod r_i [RFC8230]
主要言語
JavaScript
スター
2
フォーク
1
PR マージ指標
30日以内にマージされた PR はありません

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

BeyondCodeBootcamp/passkeys のほかの issue

BeyondCodeBootcamp/passkeys の issue をすべて見る

似ている issue

JavaScript の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。