SECONDARY INFORMATION — 非公開のHuman Sourceから、AIが編集した公開版

VERIFY

検証

本文の一致とChainの状態を、検証できる範囲を分けて確認します。genesis: /.well-known/naru-chain-genesis.json / 公開投影: https://chain.narukijima.com/v1/public/projection

何が検証できるか

記録・投稿・記事・週刊・月刊は、非公開のHuman SourceをAIが編集した二次情報です。公開された情報だけで確認できることと、個別の証明が必要なことを分けて説明します。

  • 本文の一致 — ハッシュ(内容から計算する照合値)が、取得した本文と一致するか
  • 公開鍵の継続性 — 以前に信頼して保存したgenesisと同じか。実在人物の身元証明とは別です
  • Chainの状態 — 公開投影のチェックポイントがどの日付・ブロックを示すか。個別文書の証明とは別です

1. 本文ハッシュ(content_sha256)

Markdown版の先頭には、content_sha256(本文のSHA-256)と content_length_bytes(本文のUTF-8バイト数)があります。frontmatter終端の「---」とその次の空行を除いた位置から、このバイト数だけを照合します。本文内の区切り線やコードも含め、改行や空白を変更しないでください。週刊・月刊の続き案内と末尾の利用条件は対象外です。記録などのHTMLページ末尾にも同じハッシュを表示します。

「Markdownを開く」からファイルを document.md として保存し、Node.jsのある端末で次を実行します。MATCHは本文と記載ハッシュの一致、MISMATCHは不一致を表します。

node --input-type=module - document.md <<'JS'
import { readFileSync } from 'node:fs';
import { createHash } from 'node:crypto';
const file = readFileSync(process.argv[2]);
const end = file.indexOf(Buffer.from('\n---\n\n'), 4);
if (file.subarray(0, 4).toString() !== '---\n' || end < 0) throw Error('Invalid frontmatter');
const meta = file.subarray(4, end).toString('utf8');
const expected = /^content_sha256: ([0-9a-f]{64})$/m.exec(meta)?.[1];
const length = Number(/^content_length_bytes: ([0-9]+)$/m.exec(meta)?.[1]);
const start = end + 6;
if (!expected || !Number.isSafeInteger(length) || length < 0 || start + length > file.length) throw Error('Invalid body length/hash');
const actual = createHash('sha256').update(file.subarray(start, start + length)).digest('hex');
console.log(actual === expected ? 'MATCH: body hash' : 'MISMATCH: body hash');
process.exitCode = actual === expected ? 0 : 1;
JS

これは本文の照合であり、署名検証ではありません。本文とハッシュを両方書き換えたコピーも一致します。本人由来であることや内容の正しさを、この一致だけでは証明できません。不一致の場合も、改行変換や版の違いがあり得るため、直ちに不正改変とは断定しません。

2. Genesis(公開主体のルート鍵)

Naru Kijima Chain(chain_id: narukijima-chain)のgenesisは、このサイトの /.well-known/naru-chain-genesis.json で公開しています。

  • genesis_id: 01M1088C004FT5PF28QGRPYJNZ
  • genesis_hash: 44c89d4a240cc1d0cbc13f9d5720f233de0cad98b8a65570e06e1570472393ab
  • root key: identity-root:ed25519:sha256:0f5ce6c0efc1eeff5efb0875f60f0952eff02bbd087218c208a805a1807d91b2
  • verification domain: chain.narukijima.com

genesisはEd25519のルート鍵で自己署名され、役割鍵への委任を含みます。identity_assurance は self_asserted(自己申告)です。以前に信頼した経路で取得・保存したgenesisと比較することで、公開鍵が同じかを確認できます。genesis自体は誰でもコピーできるため、同じ値を掲げているだけで本人のサイトとは判断できません。実在人物の身元や個別文書の署名を保証するものでもありません。

3. リリースの記録

公開処理では、一度ビルドした配信用アセットをSHA-256付きでChainに追記し、その同じアセットを配信します。その後に本番を読み戻し、一致を確認して初めて公開完了とします。本文や機械向け応答には実行時に生成されるものもあり、アセットの証跡だけで任意のHTTP応答を直接証明できるわけではありません。証跡は運営者が保管します。

Chainの公開投影は https://chain.narukijima.com/v1/public/projection で誰でも読めます(JSON、認証不要)。確認する項目:

  • chain_id が narukijima-chain と一致する
  • verification_status が PASS である
  • logical_date_jst・block_height・block_commitment が、どの確認済みチェックポイントを指しているか
  • anchor_status が bitcoin_attested なら、そのチェックポイントでBitcoinへのアンカー確認済みと報告されている
curl -s https://chain.narukijima.com/v1/public/projection

公開投影は、最後に外部アンカーを確認して公開したチェックポイントです。最新の未封印データや今日のリリースまで含むとは限りません。PASSはこのチェックポイントの状態であり、閲覧中の文書の検証結果ではありません。日付を確認してください。

公開投影には非公開の原文・ストリームの件数や種類は含めません。個別文書を第三者が独立検証するには、その文書との結び付きを示す署名・包含証明などが別途必要です。現在の公開投影だけでは完結しません。個別照会には非公開情報を除ける範囲で対応し、確認できない部分は未検証と扱います。

なりすましと不正利用について

公式の公開面は narukijima.ai と、そこから案内する配信先です。他所の掲載を本人の公式発信とみなさないでください。ただし、CC BY-NC-ND 4.0の条件を満たす第三者の共有まで、なりすましや不正利用と断定するものではありません。AI学習への権利留保・出典表記などの利用方針は https://narukijima.ai/terms/ をご確認ください。

不正利用を見つけた場合や、検証で不一致が出た場合は、サイト内の外部プロフィールに記載の連絡先までお知らせください。

chain_id narukijima-chain · genesis_hash 44c89d4a240cc1d0cbc13f9d5720f233de0cad98b8a65570e06e1570472393ab