PageSourceSearch

https://verseengine.cloud/assets/digital-signatures.html-992c9a39.js

js verseengine.cloud collected 2026-10-05 22:46:04 UTC 11,216 bytes, 32 lines download raw bytes

1import{_ as e,r as p,o,c,a as n,b as a,d as t,e as i}from"./app-16c86cfc.js";const l={},r=i(`<h1 id="セッションidとデジタル署名" tabindex="-1"><a class="header-anchor" href="#セッションidとデジタル署名" aria-hidden="true">#</a> セッションIDとデジタル署名</h1><p>VerseEngineは、接続ユーザーを一意に識別するためのセッションIDを内部で管理します。</p><p>このセッションIDは以下の特性を持っています:</p><ul><li>新しい接続(またはブラウザのリロード)ごとに異なるセッションIDが生成されます。</li><li>セッションIDは公開鍵として機能し、データの署名および検証が可能です。 <ul><li>秘密鍵はローカルブラウザのメモリ内にのみ保存されます。</li><li>デジタル署名のアルゴリズムには、ED25519が採用されています。</li></ul></li></ul><p>セッションIDを用いて署名を生成することで、外部サーバーとVerseEngineのユーザー間の通信を安全に紐づけることが可能となります。</p><h2 id="署名の作成" tabindex="-1"><a class="header-anchor" href="#署名の作成" aria-hidden="true">#</a> 署名の作成</h2><div class="language-typescript line-numbers-mode" data-ext="ts"><pre class="language-typescript"><code><span class="token keyword">const</span> <span class="token punctuation">{</span> player <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">await</span> VerseThree<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token operator">...</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
2<span class="token operator">...</span>
3<span class="token keyword">const</span> data <span class="token operator">=</span> <span class="token operator">...</span><span class="token punctuation">;</span>
4<span class="token keyword">const</span> signature <span class="token operator">=</span> player<span class="token punctuation">.</span><span class="token function">signString</span><span class="token punctuation">(</span>data<span class="token punctuation">)</span><span class="token punctuation">;</span>
5<span class="token keyword">await</span> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token string">&#39;...&#39;</span><span class="token punctuation">,</span>
6  headers<span class="token operator">:</span> <span class="token punctuation">{</span>
7	    <span class="token string-property property">&#39;Content-Type&#39;</span><span class="token operator">:</span> <span class="token string">&#39;application/json&#39;</span>
8  <span class="token punctuation">}</span><span class="token punctuation">,</span>
9  body<span class="token operator">:</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
10    <span class="token string-property property">&#39;sessionID&#39;</span><span class="token operator">:</span> player<span class="token punctuation">.</span>sessionID<span class="token punctuation">,</span>
11    signature<span class="token punctuation">,</span>
12    data
13  <span class="token punctuation">}</span><span class="token punctuation">)</span>
14<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
15</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="署名の検証-webブラウザ" tabindex="-1"><a class="header-anchor" href="#署名の検証-webブラウザ" aria-hidden="true">
15#</a> 署名の検証 - Webブラウザ</h2><div class="language-typescript line-numbers-mode" data-ext="ts"><pre class="language-typescript"><code><span class="token keyword">const</span> valid <span class="token operator">=</span> otherPerson<span class="token punctuation">.</span><span class="token function">verifyString</span><span class="token punctuation">(</span>signature<span class="token punctuation">,</span> data<span class="token punctuation">)</span><span class="token punctuation">;</span>
16<span class="token comment">// or</span>
17<span class="token keyword">const</span> valid <span class="token operator">=</span> VerseThree<span class="token punctuation">.</span><span class="token function">verifyString</span><span class="token punctuation">(</span>otherPerson<span class="token punctuation">.</span>sessionID<span class="token punctuation">,</span> signature<span class="token punctuation">,</span> data<span class="token punctuation">)</span><span class="token punctuation">;</span>
18<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>valid<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">Error</span><span class="token punctuation">(</span><span class="token string">&#39;invalid data&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span>
19</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="署名の検証-サーバー-rust" tabindex="-1"><a class="header-anchor" href="#署名の検証-サーバー-rust" aria-hidden="true">#</a> 署名の検証 - サーバー(rust)</h2><div class="language-rust line-numbers-mode" data-ext="rs"><pre class="language-rust"><code><span class="token keyword">
19use</span> <span class="token namespace">verse_session_id<span class="token punctuation">::</span></span><span class="token operator">*</span><span class="token punctuation">;</span>
20
21<span class="token punctuation">...</span>
22<span class="token keyword">pub</span> <span class="token keyword">fn</span> <span class="token function-definition function">verify_string</span><span class="token punctuation">(</span>session_id<span class="token punctuation">:</span> <span class="token operator">&amp;</span><span class="token keyword">str</span><span class="token punctuation">,</span> signature<span class="token punctuation">:</span> <span class="token operator">&amp;</span><span class="token keyword">str</span><span class="token punctuation">,</span> data<span class="token punctuation">:</span> <span class="token operator">&amp;</span><span class="token keyword">str</span><span class="token punctuation">)</span> <span class="token punctuation">-&gt;</span> <span class="token keyword">bool</span> <span class="token punctuation">{</span>
23    <span class="token keyword">let</span> <span class="token class-name">Ok</span><span class="token punctuation">(</span>sid<span class="token punctuation">)</span> <span class="token operator">=</span> session_id<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">::</span><span class="token operator">&lt;</span><span class="token class-name">SessionId</span><span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
24        <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
25    <span class="token punctuation">}</span><span class="token punctuation">;</span>
26    <span class="token keyword">let</span> <span class="token class-name">Ok</span><span class="token punctuation">(</span>ss<span class="token punctuation">)</span> <span class="token operator">=</span> signature<span class="token punctuation">.</span><span class="token function">parse</span><span class="token punctuation">::</span><span class="token operator">&lt;</span><span class="token class-name">SignatureSet</span><span class="token operator">&gt;</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
27        <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
28    <span class="token punctuation">}</span><span class="token punctuation">;</span>
29
30    sid<span class="token punctuation">.</span><span class="token function">verify</span><span class="token punctuation">(</span><span class="token macro property">vec!</span><span class="token punctuation">[</span>data<span class="token punctuation">.</span><span class="token function">as_bytes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">&amp;</span>ss<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">is_ok</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
31<span class="token punctuation">}</span>
32</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="関連リンク" tabindex="-1"><a class="header-anchor" href="#関連リンク" aria-hidden="true">#</a> 関連リンク</h2>`,12),u={href:"https://github.com/VerseEngine/verse-three/blob/main/docs/verse-three.player.signstring.md",target:"_blank",rel:"noopener noreferrer"},k={href:"https://github.com/VerseEngine/verse-core/blob/main/docs/verse-core.ver
32se.signstring.md",target:"_blank",rel:"noopener noreferrer"},d={href:"https://crates.io/crates/verse-session-id",target:"_blank",rel:"noopener noreferrer"};function v(m,b){const s=p("ExternalLinkIcon");return o(),c("div",null,[r,n("ul",null,[n("li",null,[n("a",u,[a("verse-three - 署名作成のリファレンス"),t(s)])]),n("li",null,[n("a",k,[a("verse-core - 署名作成のリファレンス"),t(s)])]),n("li",null,[n("a",d,[a("verse-session-id - crates.io"),t(s)])])])])}const g=e(l,[["render",v],["__file","digital-signatures.html.vue"]]);export{g as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.