-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into feature/world_spec
- Loading branch information
Showing
5 changed files
with
81 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 --> |