Skip to content

Commit

Permalink
Merge branch 'main' into feature/world_spec
Browse files Browse the repository at this point in the history
  • Loading branch information
HMasataka authored Jul 20, 2024
2 parents cdde917 + b7b6bdb commit 808699a
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 13 deletions.
42 changes: 42 additions & 0 deletions .github/workflows/textlint-reviewdog.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: reviewdog
on: [pull_request]
jobs:
textlint:
name: textlint
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: true
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: textlint-github-check
uses: tsuyoshicho/action-textlint@v3
with:
github_token: ${{ secrets.github_token }}
reporter: github-check
textlint_flags: "*/*.md"
- name: textlint-github-pr-review
uses: tsuyoshicho/action-textlint@v3
with:
github_token: ${{ secrets.github_token }}
reporter: github-pr-review
textlint_flags: "*/*.md"
- name: textlint-github-pr-check
uses: tsuyoshicho/action-textlint@v3
with:
github_token: ${{ secrets.github_token }}
reporter: github-pr-check
textlint_flags: "*/*.md"
fail_on_error: true
25 changes: 25 additions & 0 deletions .github/workflows/textlint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: textlint
on:
push:
branches:
- main
jobs:
textlint:
name: textlint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
- uses: pnpm/action-setup@v4
name: Install pnpm
with:
run_install: true
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Run lint
run: pnpm lint
4 changes: 1 addition & 3 deletions object-storage/01-what-is-object-storage.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,5 @@ Object-Storageは非ユーザー依存データを保存する役割を担当し

## 指定したレプリケーションへのバックアップ

<!-- textlint-disable -->
自動的なレプリケーションでのデータロストのリスクに備え、非ユーザー依存のデータはBloomを指定してコピーすることもできます。
<!-- text-lint-enable -->
自動的なレプリケーションでのデータロストのリスクに備え、非ユーザー依存のデータはBloomを指定してコピーできます。
例えば、思い出深いワールドは自分でホストするBloomでも保管しておくことができます。
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@
"textlint-rule-period-in-list-item": "^1.0.1",
"textlint-rule-preset-ja-technical-writing": "^10.0.1",
"textlint-rule-prh": "^6.0.0"
}
},
"packageManager": "[email protected]+sha1.8c155dc114e1689d18937974f6571e0ceee66f1d"
}
20 changes: 11 additions & 9 deletions sutera/11-Why-sutera-need-to-maintain-idempotence.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
# なぜSuteraネットワーク内の通信には羃等性が必要なのか
## 概要
Suteraネットワークでは多くのコンポーネントが情報を保持・中継する上、認証を行う中央サーバーが存在しません。そのため、電子署名以外にリクエストの正当性を保つ手段をもちません。
Suteraネットワークでは多くのコンポーネントが情報を保持・中継するうえ、認証を担う中央サーバーが存在しません。そのため、電子署名以外にリクエストの正当性を保つ手段をもちません。
しかし、まったく内容の同じリクエストならば電子署名を使い回すことが可能であり、リプレイ攻撃[^1]などが成立します。
Suteraネットワークでは、このような任意のタイミングで過去のメッセージが送信されることによる悪意ある攻撃に耐性を持つことが必要です。この耐性を確保するために、すべての通信仕様で冪等性を保つ必要があります。

## 冪等性とは
情報工学において冪等性(べきとうせい、英: idempotence)とは、ある操作を一度行っても複数回行っても同じ結果となることです
情報工学において冪等性(べきとうせい、英: idempotence)とは、ある操作を一度行っても、複数回行っても同じ結果となることを指します
特に何回実行しても内部状態が変わらない操作を指します。[^3]
冪等性の例として動画プレイヤーの一時停止ボタンを考えてみましょう。
ある動画プレイヤーに一時停止ボタンが有り、そのボタンを押すたびに一時停止と再生が切り替わると仮定します。この場合では、「一時停止ボタンを押す」という同じ操作を複数回行うたびに応内部状態が変わるため、冪等性はないと言えます。
次に一時停止ボタンと再生ボタンが分かれている場合を仮定します。この場合は一時停止ボタンを複数回押しても動画は停止したままであり、複数回同じ操作を行っても内部状態が変わらない、すなわち冪等性が保たれていると言えます。
次に一時停止ボタンと再生ボタンが分かれている場合を仮定します。この場合は一時停止ボタンを複数回押しても動画は停止したままであり、複数回同じ操作をしても内部状態が変わらない、すなわち冪等性が保たれていると言えます。
## 冪等性がない場合
Suteraネットワーク内で頻繁に行われる「特定のユーザーが保持しているファイルの内容更新」を例に、リプレイ攻撃が有効となるような通信仕様を考えてみましょう。
以下の図が冪等性がない場合の例です。この場合では最初にある人物Aが電子署名を付加したファイルを送信し、その後にAがそのファイルを更新して再び送信したと仮定します。
ここで一番最初に送信した電子署名付きのファイルを悪意ある第三者が入手して、それを再送します。この場合、第三者が送信したファイルに付加されている電子署名は正常なものなのでサーバ側はこの更新を正常なものとして処理します
以下の図は、冪等性がない場合の例です。この場合では最初にある人物Aが電子署名を付加したファイルを送信し、その後にAがそのファイルを更新して再び送信したと仮定します。
ここで一番最初に送信した電子署名付きのファイルを悪意ある第三者が入手して、それを再送します。この場合、第三者が送信したファイルに付加されている電子署名は正常なものなのでサーバー側はこの更新を正常なものとして処理します
このように、電子署名だけでは同じファイルの送信を複数回行っても正常に処理してしまうため冪等性がないと言えます。
![figure of discription unidempotence](image/unidempotence.drawio.png)

## 冪等性がある場合
冪等性がある場合の例が以下の図です。Suteraネットワークでは冪等性を保つために電子署名にバージョン情報を追加しています
この例では先程の例と同様にある人物Aが電子署名を付加したファイルを送信し、その後に更新しています。しかし、この例では先程の例ではなかったバージョン情報が電子署名に追加されています。そのため、悪意のある第三者からリプレイ攻撃を行われていてもバージョン情報の整合性が取れず、サーバでの処理が拒否されます
冪等性がある場合の例が以下の図です。Suteraネットワークでは冪等性を保つため、電子署名にバージョン情報を追加しています
この例では先程の例と同様にある人物Aが電子署名を付加したファイルを送信し、その後に更新しています。しかし、この例では先程の例ではなかったバージョン情報が電子署名に追加されています。そのため、悪意のある第三者がリプレイ攻撃をしてもバージョン情報の整合性が取れず、サーバーでの処理が拒否されます
このように、電子署名にバージョン情報を追加することで、同じ通信が複数回送信されても過去のバージョンに対する通信であることを認識でき、現在の状態を変更することはないため、冪等性が保たれていると言えます。
![figure of discription idepotence](image/idempotence.drawio.png)

## 参考文献、脚注
<!-- textlint-disable -->
[^1]: リプレイ攻撃とは標的が送信した情報を入手し、その情報を再送信することで不正なアクセスを実現する攻撃手法です。 [^2]
[^2]:リプレイ攻撃、SOMPO CYBER SECURITY サイバーセキュリティ用語集,閲覧2024-07-15, https://www.sompocybersecurity.com/column/glossary/replay-attack
[^3]:冪等性,デジタル大辞泉,ジャパンナレッジ,閲覧2024-07-13,https://japanknowledge.com/library/
[^2]: リプレイ攻撃、SOMPO CYBER SECURITY サイバーセキュリティ用語集,閲覧2024-07-15, https://www.sompocybersecurity.com/column/glossary/replay-attack
[^3]: 冪等性,デジタル大辞泉,ジャパンナレッジ,閲覧2024-07-13,https://japanknowledge.com/library/
<!-- textlint-enable -->

0 comments on commit 808699a

Please sign in to comment.