Translations: English

セッションIDとデジタル署名

VerseEngineは、接続ユーザーを一意に識別するためのセッションIDを内部で管理します。

このセッションIDは以下の特性を持っています:

  • 新しい接続(またはブラウザのリロード)ごとに異なるセッションIDが生成されます。
  • セッションIDは公開鍵として機能し、データの署名および検証が可能です。
    • 秘密鍵はローカルブラウザのメモリ内にのみ保存されます。
    • デジタル署名のアルゴリズムには、ED25519が採用されています。

セッションIDを用いて署名を生成することで、外部サーバーとVerseEngineのユーザー間の通信を安全に紐づけることが可能となります。

署名の作成

const { player } = await VerseThree.start(...);
...
const data = ...;
const signature = player.signString(data);
await fetch('...',
  headers: {
	    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    'sessionID': player.sessionID,
    signature,
    data
  })
});

署名の検証 - Webブラウザ

const valid = otherPerson.verifyString(signature, data);
// or
const valid = VerseThree.verifyString(otherPerson.sessionID, signature, data);
if(!valid) { throw new Error('invalid data'); }

署名の検証 - サーバー(rust)

use verse_session_id::*;

...
pub fn verify_string(session_id: &str, signature: &str, data: &str) -> bool {
    let Ok(sid) = session_id.parse::<SessionId>() else {
        return false;
    };
    let Ok(ss) = signature.parse::<SignatureSet>() else {
        return false;
    };

    sid.verify(vec![data.as_bytes()], &ss).is_ok()
}

関連リンク

Last Updated: