diff --git a/.github/workflows/build_docs.yml b/.github/workflows/build_docs.yml
new file mode 100644
index 0000000..5e3a3c7
--- /dev/null
+++ b/.github/workflows/build_docs.yml
@@ -0,0 +1,45 @@
+name: Build Docs
+on:
+ push:
+ branches:
+ - shield
+permissions:
+ contents: write
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Configure Git Credentials
+ run: |
+ git config user.name ocf-ssd[bot]
+ git config user.email ssd+bot@ocf.tw
+ - uses: actions/setup-python@v5
+ with:
+ python-version: "3.12"
+ - name: Cache Poetry venv
+ uses: actions/cache@v4
+ with:
+ path: ./.venv
+ key: poetry-venv-${{ hashFiles('**/poetry.lock') }}
+ - name: Cache Poetry local
+ uses: actions/cache@v4
+ with:
+ path: ~/.local/share/pypoetry
+ key: poetry-local-${{ hashFiles('**/poetry.lock') }}
+ - name: Cache Poetry cache
+ uses: actions/cache@v4
+ with:
+ path: ~/.cache/pypoetry
+ key: poetry-cache-${{ hashFiles('**/poetry.lock') }}
+ - name: Install and configure Poetry
+ uses: snok/install-poetry@v1
+ with:
+ version: 1.8.3
+ virtualenvs-create: true
+ virtualenvs-in-project: true
+ installer-parallel: true
+ - name: Install dependencies
+ run: poetry install
+ - name: Build Docs
+ run: poetry run mkdocs gh-deploy --force
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ed8f906
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/site
+.cache
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..12ecef8
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,13 @@
+{
+ "yaml.schemas": {
+ "https://squidfunk.github.io/mkdocs-material/schema.json": "mkdocs.yml"
+ },
+ "yaml.customTags": [
+ "!ENV scalar",
+ "!ENV sequence",
+ "!relative scalar",
+ "tag:yaml.org,2002:python/name:material.extensions.emoji.to_svg",
+ "tag:yaml.org,2002:python/name:material.extensions.emoji.twemoji",
+ "tag:yaml.org,2002:python/name:pymdownx.superfences.fence_code_format"
+ ]
+ }
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..da6ab6c
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,396 @@
+Attribution 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are
+ intended for use by those authorized to give the public
+ permission to use material in ways otherwise restricted by
+ copyright and certain other rights. Our licenses are
+ irrevocable. Licensors should read and understand the terms
+ and conditions of the license they choose before applying it.
+ Licensors should also secure all rights necessary before
+ applying our licenses so that the public can reuse the
+ material as expected. Licensors should clearly mark any
+ material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If
+ the licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain
+ other rights that a licensor has authority to grant. Use of
+ the licensed material may still be restricted for other
+ reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests,
+ such as asking that all changes be marked or described.
+ Although not required by our licenses, you are encouraged to
+ respect those requests where reasonable. More considerations
+ for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution 4.0 International Public License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution 4.0 International Public License ("Public License"). To the
+extent this Public License may be interpreted as a contract, You are
+granted the Licensed Rights in consideration of Your acceptance of
+these terms and conditions, and the Licensor grants You such rights in
+consideration of benefits the Licensor receives from making the
+Licensed Material available under these terms and conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner requiring
+ permission under the Copyright and Similar Rights held by the
+ Licensor. For purposes of this Public License, where the Licensed
+ Material is a musical work, performance, or sound recording,
+ Adapted Material is always produced where the Licensed Material is
+ synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. Copyright and Similar Rights means copyright and/or similar rights
+ closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or
+ categorized. For purposes of this Public License, the rights
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
+ Rights.
+
+ d. Effective Technological Measures means those measures that, in the
+ absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright
+ Treaty adopted on December 20, 1996, and/or similar international
+ agreements.
+
+ e. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ f. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ g. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ h. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ i. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the
+ public may access the material from a place and at a time
+ individually chosen by them.
+
+ j. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially
+ equivalent rights anywhere in the world.
+
+ k. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part; and
+
+ b. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public
+ License does not apply, and You do not need to comply with
+ its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section
+ 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter created,
+ and to make technical modifications necessary to do so. The
+ Licensor waives and/or agrees not to assert any right or
+ authority to forbid You from making technical modifications
+ necessary to exercise the Licensed Rights, including
+ technical modifications necessary to circumvent Effective
+ Technological Measures. For purposes of this Public License,
+ simply making modifications authorized by this Section 2(a)
+ (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or
+ may be construed as permission to assert or imply that You
+ are, or that Your use of the Licensed Material is, connected
+ with, or sponsored, endorsed, or granted official status by,
+ the Licensor or others designated to receive attribution as
+ provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however, to
+ the extent possible, the Licensor waives and/or agrees not to
+ assert any such rights held by the Licensor to the limited
+ extent necessary to allow You to exercise the Licensed
+ Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may be
+ reasonable to satisfy the conditions by providing a URI or
+ hyperlink to a resource that includes the required
+ information.
+
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ 4. If You Share Adapted Material You produce, the Adapter's
+ License You apply must not prevent recipients of the Adapted
+ Material from complying with this Public License.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material; and
+
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under
+ Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided
+ it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is
+ deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..28f2226
--- /dev/null
+++ b/README.md
@@ -0,0 +1,31 @@
+# 資安防護基礎教材
+
+給公民團體 CSOs 的資安防護基礎教材,教材收錄內容適用於個人與組織內管理者,並提供組織內可實行的政策範本。
+
+教材網站:
+
+各章節主題:
+
+1. 威脅建模:風險評估。
+2. 裝置安全:iOS、macOS、Windows、Android。
+3. 身份驗證:密碼管理器、密碼強度、多因子驗證。
+4. 網路使用行為:隱私瀏覽行為、釣魚詐騙、VPN、網路與 Wi-Fi。
+5. 加密通訊:加密即時通訊、加密電子郵件。
+6. 帳號管理:權限管理與追蹤。
+7. 資料管理與備份:檔案存取權限、資料備份與封存、更新軟體。
+8. 海外出差:準備工作、返回時的檢查。
+
+## 內容授權
+
+教材網站內容採用「[CC-BY 4.0 姓名標示](https://creativecommons.org/licenses/by/4.0/deed.zh-hant)」,如何標示引用可以[參考說明](https://ssd.ocf.tw/support/copyright.html)。
+
+---
+> [!NOTE]
+> - SSD:Shield of Self-Defense (SSD)
+
+> [!NOTE]
+> 參考資源:
+> - Security in-a-box:
+> - Privacy Guides:
+> - Surveillance Self-Defense, EFF:
+> - CSCS:
diff --git a/docs/CNAME b/docs/CNAME
new file mode 100644
index 0000000..b02210d
--- /dev/null
+++ b/docs/CNAME
@@ -0,0 +1 @@
+ssd.ocf.tw
diff --git a/docs/asserts/course_intro.svg b/docs/asserts/course_intro.svg
new file mode 100644
index 0000000..26fd9de
--- /dev/null
+++ b/docs/asserts/course_intro.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/course_intro_guide.svg b/docs/asserts/course_intro_guide.svg
new file mode 100644
index 0000000..a4eb1fe
--- /dev/null
+++ b/docs/asserts/course_intro_guide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/course_intro_policy.svg b/docs/asserts/course_intro_policy.svg
new file mode 100644
index 0000000..d0039cc
--- /dev/null
+++ b/docs/asserts/course_intro_policy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/equalitie_log.png b/docs/asserts/equalitie_log.png
new file mode 100644
index 0000000..01feff4
Binary files /dev/null and b/docs/asserts/equalitie_log.png differ
diff --git a/docs/asserts/howtouse_diff_a_team.svg b/docs/asserts/howtouse_diff_a_team.svg
new file mode 100644
index 0000000..9f2c703
--- /dev/null
+++ b/docs/asserts/howtouse_diff_a_team.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/howtouse_diff_self.svg b/docs/asserts/howtouse_diff_self.svg
new file mode 100644
index 0000000..966ad7c
--- /dev/null
+++ b/docs/asserts/howtouse_diff_self.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/howtouse_working.svg b/docs/asserts/howtouse_working.svg
new file mode 100644
index 0000000..e673747
--- /dev/null
+++ b/docs/asserts/howtouse_working.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/index_flow.svg b/docs/asserts/index_flow.svg
new file mode 100644
index 0000000..348d726
--- /dev/null
+++ b/docs/asserts/index_flow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/index_flow_1.svg b/docs/asserts/index_flow_1.svg
new file mode 100644
index 0000000..b50b0b1
--- /dev/null
+++ b/docs/asserts/index_flow_1.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/index_flow_assessment.svg b/docs/asserts/index_flow_assessment.svg
new file mode 100644
index 0000000..e62935e
--- /dev/null
+++ b/docs/asserts/index_flow_assessment.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/index_flow_chapter.svg b/docs/asserts/index_flow_chapter.svg
new file mode 100644
index 0000000..13a19a9
--- /dev/null
+++ b/docs/asserts/index_flow_chapter.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/index_flow_guide.svg b/docs/asserts/index_flow_guide.svg
new file mode 100644
index 0000000..d652b9b
--- /dev/null
+++ b/docs/asserts/index_flow_guide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/index_flow_policy.svg b/docs/asserts/index_flow_policy.svg
new file mode 100644
index 0000000..7df7185
--- /dev/null
+++ b/docs/asserts/index_flow_policy.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/index_flow_support.svg b/docs/asserts/index_flow_support.svg
new file mode 100644
index 0000000..a719188
--- /dev/null
+++ b/docs/asserts/index_flow_support.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/ocf_logo.svg b/docs/asserts/ocf_logo.svg
new file mode 100644
index 0000000..714d148
--- /dev/null
+++ b/docs/asserts/ocf_logo.svg
@@ -0,0 +1,165 @@
+
+
+
diff --git a/docs/asserts/policy_flow.svg b/docs/asserts/policy_flow.svg
new file mode 100644
index 0000000..b045818
--- /dev/null
+++ b/docs/asserts/policy_flow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/asserts/screenshot_privacyguides.png b/docs/asserts/screenshot_privacyguides.png
new file mode 100644
index 0000000..40f619f
Binary files /dev/null and b/docs/asserts/screenshot_privacyguides.png differ
diff --git a/docs/asserts/screenshot_securityinabox.png b/docs/asserts/screenshot_securityinabox.png
new file mode 100644
index 0000000..f3fd3f2
Binary files /dev/null and b/docs/asserts/screenshot_securityinabox.png differ
diff --git a/docs/asserts/screenshot_ssdeff.png b/docs/asserts/screenshot_ssdeff.png
new file mode 100644
index 0000000..66b60ac
Binary files /dev/null and b/docs/asserts/screenshot_ssdeff.png differ
diff --git a/docs/asserts/security.svg b/docs/asserts/security.svg
new file mode 100644
index 0000000..1a74032
--- /dev/null
+++ b/docs/asserts/security.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/assessment/checklist/homework.md b/docs/assessment/checklist/homework.md
new file mode 100644
index 0000000..ff4bf79
--- /dev/null
+++ b/docs/assessment/checklist/homework.md
@@ -0,0 +1,14 @@
+---
+icon: material/home-edit
+title: 檢查清單
+---
+
+# :material-home-edit: 課後任務清單
+
+## 說明
+
+此表格功用為紀錄各章節預期課後練習、閱讀、複習時的任務項目,試算表中以各主題分不同的表單分類,再依「尚未開始」、「進行中」、「已完成」分項紀錄。
+
+## 表單
+
+[課後任務清單](https://docs.google.com/spreadsheets/d/1ACdisZ2Ct0a2FfAhu62_2fR47K_fhzwBylJEUS6O_4o/edit){ .md-button }
diff --git a/docs/assessment/checklist/index.md b/docs/assessment/checklist/index.md
new file mode 100644
index 0000000..4ebe900
--- /dev/null
+++ b/docs/assessment/checklist/index.md
@@ -0,0 +1,10 @@
+---
+icon: octicons/checklist-16
+title: 檢查清單
+---
+
+# :octicons-checklist-16: 檢查清單
+
+!!! info "使用說明"
+
+ 檢查清單為各式項目的檢查文件工具,協助專案執行或輔助組織夥伴檢核目前的進度狀況,請再依左側項目名稱選擇需要的檢查清單文件,依說明指示使用。
diff --git a/docs/assessment/checklist/site_survey.md b/docs/assessment/checklist/site_survey.md
new file mode 100644
index 0000000..b2d427e
--- /dev/null
+++ b/docs/assessment/checklist/site_survey.md
@@ -0,0 +1,115 @@
+---
+icon: octicons/checklist-16
+title: 場勘紀錄表
+---
+
+# :octicons-checklist-16: 場勘紀錄表
+
+!!! note "使用時機點"
+
+ 服務對象的工作場域基本環境紀錄,著重在工作環境、網路基礎設施與設備。
+
+## 場勘基本資訊
+
+- [ ] **場勘日期:** \_______
+- [ ] **場勘人員:** \_______
+
+## 地理與空間資訊
+
+- [ ] **交通方式**
+ - [ ] 公共交通
+ - [ ] 停車設施
+
+- [ ] **建物類型**
+ - [ ] 獨棟建築
+ - [ ] 辦公大樓
+ - [ ] 共享空間
+ - [ ] 住宅公寓
+ - [ ] 其他: \_______
+
+- [ ] **樓層與房間號碼:** \_______
+- [ ] **場域面積:** \_______
+
+## 基本參數
+
+- [ ] **組織成立時間:** \_______
+
+- [ ] **組織規模**
+ - [ ] 員工/成員數: \_______
+
+## 設施與設備
+
+- [ ] **辦公設備**
+ - [ ] 電腦: 數量 \___
+ - [ ] 影印機: 數量 \___
+ - [ ] 投影機: 數量 \___
+ - [ ] 其他: \_______
+
+- [ ] **會議設施**
+ - [ ] 會議室: 數量 \___
+ - [ ] 休息區: 位置/數量 \___
+
+- [ ] **安全設施**
+ - [ ] 消防設備
+ - [ ] 緊急出口
+
+- [ ] **無障礙設施**
+
+## 網路基礎建設
+
+- [ ] **網路服務提供商:** \_______
+
+- [ ] **網路連線種類**
+ - [ ] 光纖
+ - [ ] ADSL
+ - [ ] 其他: \_______
+
+- [ ] **網速測試結果**
+ - 下載速度: \_______ Mbps
+ - 上傳速度: \_______ Mbps
+
+- [ ] **Wi-Fi 覆蓋範圍與強度**
+ - [ ] 覆蓋範圍: \_______
+ - [ ] 信號強度: \_______
+
+- [ ] **有無專用伺服器或雲端服務**
+ - [ ] 專用伺服器
+ - [ ] 雲端服務
+
+- [ ] **備用網路計畫**
+ - [ ] 有
+ - [ ] 無
+
+## 電力與基礎設施
+
+- [ ] **電力供應穩定性**
+ - [ ] 穩定
+ - [ ] 不穩定
+
+- [ ] **備用電力設施**
+ - [ ] UPS(不間斷電源系統)
+ - [ ] 發電機
+
+- [ ] **插座數量與位置分佈**
+ - 數量: \_______
+ - 位置: \_______
+
+## 安全與隱私
+
+- [ ] **網路安全措施**
+ - [ ] 防火牆
+ - [ ] 加密
+
+- [ ] **資料保護政策:** \_______
+- [ ] **訪客管理系統**
+
+## 其他
+
+- [ ] **場地租金或營運成本:** \_______
+- [ ] **與當地社區的互動狀況:** \_______
+- [ ] **其他需要特別注意的事項:** \_______
+
+## 簽名和確認
+
+- [ ] **場勘人員簽名:** \_______
+- [ ] **組織負責人簽名:** \_______
diff --git a/docs/assessment/index.md b/docs/assessment/index.md
new file mode 100644
index 0000000..a037701
--- /dev/null
+++ b/docs/assessment/index.md
@@ -0,0 +1,25 @@
+---
+icon: octicons/graph-16
+title: 狀態評估
+---
+
+# :octicons-graph-16: 狀態評估
+
+???+ abstract "學習歷程:「狀態評估」"
+
+
+
+ 您目前在「[狀態評估]」,服務導入團隊將定期關懷,並協助提供在專案推進與問題協助。(完整流程:「[章節內容]」、「[操作手冊]」、「[政策制定]」、「[狀態評估]」、「[關懷與諮詢]」)
+
+ [章節內容]: ../chapter/index.md
+ [操作手冊]: ../user_guide/index.md
+ [政策制定]: ../policy/index.md
+ [狀態評估]: ../assessment/index.md
+ [關懷與諮詢]: ../support/index.md
+
+## 說明
+
+透過相關的狀態評估表評估、評量目前組織內夥伴在資安抵禦知識與技能的成長程度。
diff --git a/docs/chapter/abroad.md b/docs/chapter/abroad.md
new file mode 100644
index 0000000..4c208b0
--- /dev/null
+++ b/docs/chapter/abroad.md
@@ -0,0 +1,124 @@
+---
+icon: material/airplane
+title: 海外出差
+---
+
+# :material-airplane: 海外出差
+
+海外出差這一章節順序放置在最後,是因為這章節將綜合前段所有的工具、概念一起,換句話說,也是一個現實生活中的實戰考驗的環節。
+
+出差前往臺灣以外的地方需要考慮的因素有點複雜,現實層面的部份可能比重會較多,我們一步步來檢視是否有將以下所提及的因素考慮在內,部份能透過數位工具的方式抵禦或是繞過其困難的部份,也將依各部份給予可行的建議。
+
+## 出發前的準備
+
+### 旅遊警示燈號
+出發前往的國家、地區可以參考外交部提供的「[國外旅遊警示分級表](https://www.boca.gov.tw/sp-trwa-list-1.html)」所提供的警示燈號確認該國家是否建議前往,即使不宜前往,也能了解其狀況做相對應的準備工作。
+
+另外也可參考外交部[此頁面](https://www.boca.gov.tw/np-52-1.html)的分類,關於[食品](https://consumer.fda.gov.tw/Pages/List.aspx?nodeID=-1)、[疫情](https://www.cdc.gov.tw/CountryEpidLevel/Index/NlUwZUNvckRWQ09CbDJkRVFjaExjUT09)、[其他國家的警示](https://www.boca.gov.tw/lp-95-1.html)公告資訊。
+
+#### 中港澳地區
+
+中國、香港、澳門地區由大陸委員會負責[公告](https://www.mac.gov.tw/News.aspx?n=E0243AD02975213D)其旅遊警示資訊。
+
+!!! warning "警示升級注意"
+
+ 2024 年 6 月 27 日起,大陸委員會針對中共近期於「國家安全法」、「境外非政府組織境內活動管理法」、「網路安全法」、「反間諜安全防範工作規定」…等修法項目內容評估,提昇赴陸港澳之人身安全風險,因此目前提升到「橙色」燈號,應避免非必要旅行。【[完整公告](https://www.mac.gov.tw/News_Content.aspx?n=E0243AD02975213D&sms=EF1DC35EB9749B36&s=CA568B3D88264221)】
+
+### 器材準備
+
+以下請在出發前準備妥當,準備原則以無法或難以追朔上游的關聯為主。
+
+1. **攜帶乾淨的設備**:這裡提及的**乾淨**為**全新**或**已格式化**、**恢復原廠設定**的裝置、無添加的資料於裝置中。
+2. **設備加密**:這一步驟可能在格式化時就要處理,如果設備或行動裝置可以在格式化過程啟用加密功能,請記得啟用。如果是在作業系統完成安裝後,進入到系統後才能啟用的功能,也請記得完成「**啟用裝置加密或磁碟加密**」。
+3. **設備更新**:重新格式化或恢復的原廠設定後,設備或裝置理論上是停留在舊版本,請記得要更新系統。
+
+!!! info "完成順序"
+
+ - 「設備加密」相關的操作可以參考「[操作手冊:裝置安全](../user_guide/devices/index.md)」。
+ - 「設備更新」的步驟或許會在「設備加密」之前,但不影響「設備加密」的問題,只需要都有完成即可。
+
+### 備份、加密資料
+
+如裝置因為某些原因無法達到乾淨的狀態,可以採取備份、加密資料的方式斷開或隱藏其重要資訊。例如:出訪行程、聯絡人資訊、研究資料…等
+
+- **採取備份**:為將裝置中相關敏感資訊備份到其他裝置、儲存媒介、雲端空間…等,暫時脫離原本工作用的裝置。
+- **加密方式**:則透過加密軟體將機敏資訊檔案轉換為難以破解的狀態。可以持續儲存在裝置中或以備份方式儲存在其他位置,當需要使用時再匯入與解密使用。
+
+!!! info "「備份」、「檔案加密」參考章節"
+
+ - 備份相關的介紹可以參考「[資料管理與備份](./files_management/index.md)」。
+ - 檔案加密的操作需要了解其原理與限制,可以參考「[加密通訊](./e2ee/index.md)」章節的介紹。
+
+### 通訊安全
+
+#### SIM 卡
+
+不論是使用**當地**或**國際跨國通用**的 SIM、eSIM 作為行動裝置通訊,選購時請注意相關的事項。
+
+1. **在官方或正規管道購買**:在官方或是其授權的銷售點購買,避免在路邊或是網路上非官方店家購買。
+2. **個人資訊保護**:在某些國家購買 SIM、eSIM 需要個人資訊或僅能透過信用卡購買(不能現金),請衡量可接受的個人資訊揭露程度,避免店家蒐集過多的個人資訊。
+3. **SIM 卡的合法性**:部份店家宣稱可以匿名購買與使用,也請斟酌其可信度再考慮是否使用。
+4. **預先調查供應商**:預先調查電信公司的安全與隱私政策,是否超出可接受的安全範圍。
+5. **避免敏感通訊**:多國或部份國家的電信可能存在監聽的風險,即使是透過漫遊也存在多個運營商之間的協議安全漏洞問題,因此盡量避免機敏資訊的通訊,非不得以,也請確認 VPN 全時開啟且在正常運作下傳遞。
+
+#### 旅遊用 Wi-Fi 分享器
+
+旅遊時 Wi-Fi 分享器租用時請注意相關的事項。
+
+1. **設備廠牌**:確認所租用的設備是提供來自哪一國家所製造的設備,應排除已知具有高風險國家生產的設備。
+2. **加密方式**:確認 Wi-Fi 分享器是否使用 WPA3 或 WPA2 的加密方式,除此之外皆有安全疑慮。
+3. **VPN 連線**:即使是自己自行租用的設備,也請全時啟用 VPN 連線。
+
+!!! note "關於「通訊安全」相關的章節"
+
+ 可參考「[VPN](./network/vpn.md)」、「[網路與 Wi-Fi](./network/wifi.md)」、「[加密通訊](./e2ee/index.md)」內容補充更多細節。
+
+#### 緊急聯絡與應變
+
+請在出發前擬定緊急聯絡與應變對策,例如在當地如何聯繫大使館、領事館或在當地可信賴的團體或個人,並建立定時回報機制。
+
+1. 出發前將出差規劃提供給組織內同仁,確認行程與回報方式。
+2. 回報方式可以是直接通訊或是其他約定的間接方式呈現,依前往的地區與行程安全性質來衡量。
+3. 外交部提供「[出國登錄](https://www.boca.gov.tw/sp-abre-main-1.html)」,前往中港澳地區可使用「[國人赴大陸地區動態登錄網頁](https://www.mac.gov.tw/cp.aspx?n=E2367C5B8C7C3AE1)」或「[國人赴港澳動態登錄網頁](https://www.mac.gov.tw/cp.aspx?n=DB5CA7E8ABA7E5DC&s=DF4CCC975F20A2A1)」,評估是否登錄提供給駐外館處能立即聯繫提供協助方式。
+4. 事前風險評估:在出發前,進行詳細的風險評估,識別可能的風險來源,並制定相應的應變計劃。
+5. 撤離路線:在目的地設置多條應急撤離路線,確保在不同情況下都能迅速撤離至安全地點。
+6. 集合點:設定團隊成員在突發狀況下的集合點,並且所有成員都熟知如何前往集合點。
+
+!!! note "回報方式、如何回報"
+
+ 回報方式、與如何回報的建議:
+
+ - 回報頻率:根據行程安排設定定時回報的頻率,例如每天一次或每 48 小時一次。確保回報機制實際可行且不增加額外負擔。
+ - 回報內容:規定回報需包含的基本訊息,如當前所在地、安全狀況、當日活動計劃等。
+ - 通訊工具:選擇可靠、安全的通訊工具進行回報,如加密即時通訊 Signal 或加密電子郵件。
+ - 備用方法:如主要通訊工具無法使用,確保有備用方案(網頁表單留言)。
+
+## 行動中的安全措施
+
+這些措施能夠進一步確保個人和團體的安全,並保護敏感資訊。詳細的安全措施建議:
+
+### 資訊安全
+
+1. 避免使用公共、免費 Wi-Fi,如:咖啡店、機場等提供的 Wi-Fi,因為這些網路容易被攔截或監聽。
+2. 使用隱私、匿名工具,如:Tor 瀏覽器進行匿名瀏覽、VPN 加密網路連線。
+3. 確認使用資料後均回到加密狀態,裝置上無任何未加密的機敏資料,包含聯絡人資訊。在傳輸資料時,也請先加密檔案資料後傳輸。
+
+### 物理安全
+
+當公民團體在海外出差時,「行動中的安全措施」不僅包括避免公共、免費 Wi-Fi 和匿名瀏覽,還應包含許多其他方面:
+
+1. 選擇治安較好的住宿地點,避開已知的高危險犯罪區。
+2. 隨身攜帶緊急聯絡資訊。
+3. 分散重要物品,保留部份重要文件與現金備用。
+4. 行為舉止低調、服裝合宜,避免在公開場合大聲喧嘩引起不必要的注意。
+5. 瞭解當地法律規範,選擇適時避談敏感議題。尊重當地文化、習慣,避免文化差異引起的衝突。
+6. 控制公開訊息的揭露,避免在社群媒體上發佈行程或活動訊息,以避免暴露行蹤。或控制隱私設定,限制部份對象可以看到你的貼文或訊息。
+7. 設備使用時注意短暫離開時也請主動鎖定電腦或行動裝置,也注意避免單獨遺留設備或防止未經授權的人員接觸。
+
+## 返回時的檢查
+
+1. 返回前確認資料是否正確備份,返回後將備份資料恢復、歸檔。
+2. 徹底執行設備檢查(是否多了、少了什麼?),移除非必要使用的應用程式、網路連線資訊,如無法確保是否乾淨安全,建議可評估是否執行格式化或回到原廠設定重新設定,或進行一次密碼、2FA 更換的操作。
+3. 行程回顧、重新評估可能出現的安全風險、並檢討與紀錄提供未來參考、修正。
+4. 回報任何可疑活動、異常狀況,以利組織內的成員評估與修正安全檢查。
+5. 抵禦社交工程:提高警惕、回國後短期內可能被針對性的進行社交工程,防範釣魚信件、異常電話詢問。
diff --git a/docs/chapter/account/index.md b/docs/chapter/account/index.md
new file mode 100644
index 0000000..400930b
--- /dev/null
+++ b/docs/chapter/account/index.md
@@ -0,0 +1,16 @@
+---
+icon: material/account-box
+title: 帳號管理
+---
+
+# :material-account-box: 帳號管理
+
+帳號權限管理與追蹤是確保組織資訊安全的重要步驟之一。在一個公民團體中,不同的成員可能會涉及不同的工作內容,因此需要對每個帳號設定明確的權限。
+
+1. **帳號權限管理**:
+ - **最小必要權限**:讓每個帳號僅有其工作需要的最低限度權限,避免不必要的風險。例如,財務人員應僅能存取財務資料,不能查看或修改其他部門的資料。
+ - **定期審查與更新**:定期檢視成員的帳號權限,確保他們的權限仍然適合其目前的工作角色。當人員異動或職務變更時,及時調整其帳號權限。
+
+2. **帳號追蹤**:
+ - **記錄使用行為**:通過系統記錄各帳號的使用行為,例如登入時間、存取的資料等,防範異常活動。
+ - **異常行為警告**:設定警告機制,當發現異常行為(如異常位置登入或嘗試存取未授權資料)時立即通知管理者。
diff --git a/docs/chapter/account/management.md b/docs/chapter/account/management.md
new file mode 100644
index 0000000..b4a08cf
--- /dev/null
+++ b/docs/chapter/account/management.md
@@ -0,0 +1,61 @@
+---
+title: 帳號權限管理與追蹤
+---
+
+# :material-account-key: 帳號權限管理與追蹤
+
+目前以 Google Workspace 和 Microsoft 365 這兩個常見的線上協作工具作為範例。
+
+## 1. 建立角色和權限
+
+在進行帳號管理時,首先要明確不同角色所需的權限。常見的角色可以包括管理者、編輯者和檢視者。每個角色應該有自己特定的權限範圍。
+
+- Google Workspace
+
+ - **管理員控制台**:使用 Google Workspace 的管理控制台,進入使用者和角色設定頁面,設定不同角色的權限。
+ - **授權範圍**:給特定使用者指派不同的角色,定義他們能夠訪問和操作的範圍,如查看、編輯文件等。
+
+- Microsoft 365
+
+ - **Microsoft 365 管理中心**:進入管理中心,在「使用者」部分中,選擇使用者並設定其角色。
+ - **分享與權限設定**:在各種文件或資源內調整權限,如具體文件可以設定誰可以編輯、誰只能讀取。
+
+## 2. 實施最小權限原則
+
+只給使用者他們完成工作所需的最少權限,避免過度授權,這能有效降低安全風險。
+
+!!! question "最小權限原則"
+
+ 「實施最小權限原則」是指在分配帳號權限時,只給予使用者執行其工作所需的最低限度權限。這樣做的目的是減少因誤用或濫用權限所帶來的安全風險。
+
+ 1. **評估需求**:瞭解每個使用者的實際需求,根據他們的角色和職責分配適當的權限。
+ 2. **定期審查**:定期審查權限分配,確保不必要的權限能及時回收。
+ 3. **分層管理**:將帳號權限分層,確保只有需要高權限的使用者才能存取重要資訊或系統。
+
+## 3. 定期審查和更新權限
+
+權限應該定期審查並根據情況調整。例如,有成員離職或角色變動時要及時更新其權限。
+
+## 4. 追蹤和紀錄
+
+維持使用者操作行為的紀錄,以便在需要時能夠追溯操作歷程。
+
+- Google Workspace
+
+ - **使用者記錄事件**:可以檢查和追蹤使用者的[活動紀錄](https://support.google.com/a/answer/4580120?hl=zh-Hant),確保所有變更和操作都有紀錄。
+
+- Microsoft 365
+
+ - **稽核記錄活動**:提供[稽核日誌和活動報告](https://learn.microsoft.com/zh-tw/purview/audit-log-activities),便於追蹤和調查。
+
+## 5. 啟用雙重驗證 (2FA)
+
+確保所有帳號啟用雙重驗證,增加一層額外的安全保障。
+
+- Google Workspace
+
+ - **強制設定使用者啟用**:[調整使用者 2FA 設定](https://support.google.com/a/answer/9176657?hl=zh-Hant)。
+
+- Microsoft 365
+
+ - **強制設定使用者啟用**:[調整使用者 2FA 設定](https://learn.microsoft.com/zh-tw/microsoft-365/admin/security-and-compliance/set-up-multi-factor-authentication?view=o365-worldwide)。
diff --git a/docs/chapter/devices.md b/docs/chapter/devices.md
new file mode 100644
index 0000000..bbd6611
--- /dev/null
+++ b/docs/chapter/devices.md
@@ -0,0 +1,55 @@
+---
+icon: octicons/devices-24
+title: 裝置安全
+---
+# :octicons-devices-24: 裝置安全
+
+在當今數位化的社會中,裝置安全是維護資訊安全的基石之一。無論是智慧型手機、筆記型電腦還是平板電腦,各式各樣的裝置都儲存了許多重要的個人資訊及資料。公民團體常常處理機敏資料,如捐款者資訊、聯絡網名單、活動計畫及財務報表等,這些資訊一旦遭到非法存取或惡意損壞,不僅會影響組織的運作,更可能對其成員的個資安全造成嚴重威脅。
+
+!!! info inline end "課程教材"
+
+ - :open_file_folder: [課程簡報(CSCS, v.3 _ 3. 電腦和手機安全 _.pptx, Google Slides)](https://docs.google.com/presentation/d/1jRTSTfHXAfofcpLBFWLYopfd8Nq6vsP4/)
+
+為了防範可能的網路攻擊和資安風險,確保每一個使用的裝置都符合安全標準是極其重要的。透過實施裝置安全措施,公民團體不僅可以保護自身的資訊安全,更能提升組織整體的信任度與專業形象。而本章節將引領大家了解裝置安全的基本知識,並提供實用的策略和工具,以便能夠有效地保護自己的裝置免受威脅。
+
+## 如何開始第一步?
+
+每個人平均至少會有一台智慧型手機與一台筆記型電腦,由於公民團體的特性,大部分的會將組織資訊與個人日常使用資訊共用在私人裝置中。即使在資源足夠的狀況下、擁有複數裝置分離公、私使用,也請認真盤點目前歸屬於自己使用的裝置。
+
+### 1. 盤點個人裝置的重要性
+
+- **資料保護**:確認所有裝置均已安裝必要的安全設定與更新,可防止機敏資訊遭到未授權存取或洩漏。
+- **安全維護**:定期檢查和更新裝置可以減少安全漏洞,提高抵抗惡意軟體和網路攻擊的能力。
+- **資源管理**:清楚掌握組織中的裝置使用情況,有助於效率提升和成本控制。
+- **合規性**:確保所有裝置符合相關的法規或組織政策要求,避免違規所帶來的風險和損失。
+
+### 2. 實施裝置盤點的步驟
+
+- **建立裝置清單**:首先建立一份組織中所有裝置的清單,包括電腦、手機、平板等。每一項裝置應該記錄型號、序號、購買日期、保固狀態等基本信息。
+- **定期檢查安全設定**:確保所有裝置安裝了最新的作業系統和應用程式更新。檢查防火牆、防毒軟體和其他安全設定是否啟動和更新。
+- **控制訪問權限**:限制對機敏資訊的存取權限,只有授權的使用者才能存取重要資料。
+- **執行物理安全措施**:確保所有裝置在不使用時,能安全存放並有防盜與**遠端強制移除或登出**措施。
+- **制定應急計劃**:萬一裝置丟失或損壞,應有備份和恢復、復原計畫以減少資料損失。
+
+### 3. 培訓與教育
+
+!!! info inline end "操作手冊"
+
+ 與裝置安全相關的操作手冊,請參考此章節。
+
+ [:material-arrow-right-bold: 操作手冊:裝置安全](../user_guide/devices/index.md){ .md-button .md-button--primary }
+
+- **定期培訓**:定期為團隊成員提供裝置安全意識培訓,增強其對於安全威脅的認識和應對能力。
+- **製作使用指南**:提供裝置使用和安全維護的操作手冊,使團隊成員能夠更好地管理和保護自己的裝置。
+
+
+### 4. 監督與回饋
+
+!!! info inline end "制定政策"
+
+ 與裝置安全相關的制定政策範本,請參考此章節。
+
+ [:material-arrow-right-bold: 制定政策:裝置安全](){ .md-button .md-button--primary }
+
+- **定期檢討**:定期對裝置安全措施進行檢討和評估,以確保措施有效並根據最新的安全趨勢進行調整。
+- **回饋機制**:鼓勵團隊成員提供意見回饋,以便於發現系統或計畫的缺陷或不足之處,並及時修正。
diff --git a/docs/chapter/e2ee/im.md b/docs/chapter/e2ee/im.md
new file mode 100644
index 0000000..d6a281a
--- /dev/null
+++ b/docs/chapter/e2ee/im.md
@@ -0,0 +1,89 @@
+---
+title: 加密即時通訊
+---
+
+# :material-message-lock: 加密即時通訊
+
+隨著數位時代的來臨,即時通訊已成為日常生活和工作的一部分。特別是對於公民團體來說,在保護隱私和機敏資訊上,加密即時通訊工具的重要性不可忽視。這一章節將介紹何謂加密即時通訊、其重要性、以及目前推薦的加密即時通訊應用程式,並進行比較分析。
+
+!!! note "補充資料"
+
+ 關於 **E2EE(端對端加密)**、 **PGP** 與**驗證數位簽章**的關係,可以參考「[:material-shield-lock: 加密通訊](./index.md)」章節的介紹。
+
+## 什麼是加密即時通訊?
+
+加密即時通訊是指在訊息傳輸過程中對訊息進行加密,以防止未經授權的第三方攔截、讀取或竄改信息。這些應用程式通常採用端對端加密(End-to-End Encryption,E2EE),確保只有發送者和接收者能夠解讀訊息內容。
+
+## 為什麼加密即時通訊很重要?
+
+1. **保護隱私**:確保您的對話不會被監聽或攔截。
+2. **訊息安全**:防止機敏資訊被洩露或竄改。
+3. **身份驗證**:確認您正在與正確的人對話,防止冒名頂替。
+4. **合法合規**:遵守隱私保護的規範和法律,特別是對於處理機敏資料的組織。
+
+## 推薦的加密即時通訊
+
+1. **Signal** {++:first_place: 隱私和安全性為最高++}
+ - **:white_check_mark: 優點**:
+ - 強加密:Signal 使用端到端加密,確保訊息只能由發送者和接收者讀取。
+ - 開源軟體:其程式碼公開,任何人都可以檢視並審查其安全性。
+ - 隱私功能:支援訊息自毀(Self-destructing messages)和螢幕安全(Screen security)。
+ - **:no_entry: 缺點**:
+ - 手機號碼註冊:註冊時必須提供手機號碼,可能會對一些使用者造成隱私顧慮。{++(但可以透過建立帳號名稱的方式,如:`@Jack.23` 來取代透過電話號碼方式來分享給其他人)++}
+ - 依賴中央伺服器:所有訊息需要通過他們的伺服器進行傳送。
+
+ [:material-cellphone-message: Signal 官方網站](https://signal.org/){ .md-button }
+
+2. **Telegram** {==:first_place: 簡單快速的溝通方式==}
+ - **:white_check_mark: 優點**:
+ - 多平台支持:支援多種裝置,包括桌面和行動裝置。
+ - 廣大的用戶基數:擁有龐大的用戶群,方便與他人溝通。
+ - 雲端儲存:支援訊息和媒體文件的雲端儲存,方便查詢歷史訊息。
+ - **:no_entry: 缺點**:
+ - 非預設加密:並非所有訊息都預設開啟使用端到端加密,僅在「秘密對話」中才有啟用。
+ - 曾有過數次安全爭議。
+
+ [:material-cellphone-message: Telegram 官方網站](https://telegram.org/){ .md-button }
+
+3. **Session** {++:first_place: 隱私和安全性為最高++}
+ - **:white_check_mark: 優點**:
+ - 完全匿名:不需要手機號碼或電子郵件地址註冊,保持使用者完全匿名。
+ - 去中心化:基於分散式網路,不依賴中央伺服器。
+ - 強加密:端到端加密,確保訊息安全。
+ - **:no_entry: 缺點**:
+ - 新興平台:相較於其他平台,用戶基數較小,仍在發展階段。
+ - 功能限制:缺少一些常見的即時通訊功能,如視訊通話。
+
+ [:material-cellphone-message: Session 官方網站](https://getsession.org/){ .md-button }
+
+4. **SimpleX Chat**
+ - **:white_check_mark: 優點**:
+ - 完全去中心化:不使用伺服器進行訊息傳遞,提升隱私和安全性。
+ - 無需註冊:不需要提供任何個人資訊進行註冊。
+ - 高度隱私:訊息傳輸過程中保持高度匿名。
+ - **:no_entry: 缺點**:
+ - 體驗欠佳:部分用戶反應傳輸速度較慢,使用體驗有待優化。
+ - 不夠成熟:技術和社群支援仍然在發展中。
+
+ [:material-cellphone-message: SimpleX Chat 官方網站](https://simplex.chat/){ .md-button }
+
+5. **Briar**
+ - **:white_check_mark: 優點**:
+ - 高度安全:使用端到端加密,並具有匿名功能。
+ - 無需網際網路:支援藍牙和 Wi-Fi Direct,可以在沒有網路連接的情況下通訊。
+ - 完全去中心化:不依賴中央伺服器。
+ - **:no_entry: 缺點**:
+ - 使用者界面簡單:功能和界面設計較簡單,不如其他即時通訊軟體豐富。
+ - 限制平台:目前僅支援 Android 平台。
+
+ [:material-cellphone-message: Briar 官方網站](https://briarproject.org/){ .md-button }
+
+6. **Bridgefy** {==:first_place: 簡單快速的溝通方式==}
+ - **:white_check_mark: 優點**:
+ - 跨越網路限制:使用藍牙技術,可以在沒有網路的情況下,實現離線傳訊。
+ - 災害應用:在災害或大型活動中,能提供穩定的本地通訊。
+ - **:no_entry: 缺點**:
+ - 加密限制:消息並非總是端到端加密,使用時要特別注意訊息安全。
+ - 範圍限制:依賴藍牙連接,通信範圍有限。
+
+ [:material-cellphone-message: Bridgefy 官方網站](https://bridgefy.me/){ .md-button }
diff --git a/docs/chapter/e2ee/index.md b/docs/chapter/e2ee/index.md
new file mode 100644
index 0000000..446fcf5
--- /dev/null
+++ b/docs/chapter/e2ee/index.md
@@ -0,0 +1,104 @@
+---
+icon: material/shield-lock
+title: 加密通訊
+---
+
+# :material-shield-lock: 加密通訊
+
+## 什麼是 E2EE (端對端加密)
+
+端對端加密(End-to-End Encryption,簡稱 E2EE)是一種加密傳送訊息類型,通信訊息資料從發送端出發,直到接收端解密之前,始終保持加密狀態。這意味著除了通信的兩端之外,任何中間節點,包括{==網路提供者、伺服器運營者甚至是駭客,都無法去解密這些訊息==}。
+
+### E2EE 的原理與運作方式
+
+端對端加密的核心在於密鑰的管理。每個通信的參與者擁有一對密鑰:{==公鑰(公開)==}和{++私鑰(秘密保存)++}。公鑰加密的訊息只能用相應的私鑰解密,反之亦然。以下是一個簡單的例子來解釋其運作方式:
+
+#### 經典範例:Alice 和 Bob 的通信
+
+1. **生成密鑰對:**
+ Alice 和 Bob 各自生成一對密鑰,每對密鑰中包含一個{==公鑰==}和一個{++私鑰++}。
+
+2. **交換公鑰**:
+ Alice 將她的{==公鑰==}發送給 Bob,Bob 也將他的{==公鑰==}發送給 Alice。
+
+3. **加密訊息**:
+ 當 Alice 想要發送訊息給 Bob 時,她會使用 Bob 的{==公鑰==}加密訊息。
+ 假設 Alice 要發送 "**Hello, Bob!**" 這條訊息,她會用 Bob 的{==公鑰==}進行加密,生成一段密文。
+
+4. **傳送密文**:
+ 加密後的訊息以密文形式在網路上傳送。即使訊息在傳輸過程中被攔截,駭客也無法讀取內容,因為他們沒有 Bob 的{++私鑰++}。
+
+5. **解密訊息**:
+ 當 Bob 收到這段密文後,會用他的{++私鑰++}來解密,從而得到 Alice 發送的原文訊息 "**Hello, Bob!**"。
+
+### E2EE 的優點
+
+- **強化隱私保護**: 只有通信的當事人能解讀訊息內容,中間節點即便攔截也無法解密。
+- **防止竊聽與攻擊**: 即使駭客入侵了伺服器或竊聽了網路封包數據,也難以解密端對端加密的訊息。
+- **提升資料完整性**: 防止訊息在傳輸過程中被篡改,確保資料的真實性和可靠性。
+
+!!! note "補充教材"
+
+ - [什麼是端對端加密 (E2EE)? | Cloudflare](https://www.cloudflare.com/zh-tw/learning/privacy/what-is-end-to-end-encryption/)
+
+## PGP 介紹
+
+**PGP(Pretty Good Privacy)** 是一種數位加密技術,用於**保護電子郵件和文件的安全性**。PGP 結合了對稱加密和非對稱加密的優勢,提供強大的資料保護功能,包括加密訊息、數位簽章以及鑑別身份等。
+
+PGP 主要有以下幾個核心功能:
+
+1. **加密**:保護訊息內容,只有持有相應解密密鑰的人才能讀取。
+2. **解密**:將加密訊息還原為可讀的原文。
+3. **數位簽章**:驗證訊息發送者的身份和訊息完整性。
+4. **密鑰管理**:生成和管理公鑰與私鑰對。
+
+### PGP 的實際例子
+
+假設 Alice 需要發送一封加密訊息給 Bob:
+
+1. **生成訊息**:Alice 撰寫她希望傳遞的訊息。
+2. **生成對稱密鑰**:PGP 生成一個臨時的對稱加密密鑰(Session Key)。
+3. **對稱加密訊息**:Alice 使用這個對稱密鑰加密訊息,生成加密的訊息內容。
+4. **公鑰加密對稱密鑰**:Alice 使用 Bob 的公鑰加密這個對稱密鑰。
+5. **發送加密資料**:Alice 將(1)加密後的訊息內容 和 (2) 經過 Bob 的公鑰加密後的對稱密鑰一起發送給 Bob。
+
+Bob 接收到來自 Alice 的加密資料後:
+
+1. **提取對稱密鑰**:Bob 使用自己的私鑰解密 Alice 用他公鑰加密的對稱密鑰。
+2. **解密訊息內容**:Bob 再用這個對稱密鑰解密加密的訊息內容,還原成原始訊息。
+
+這樣,訊息在傳輸過程中即便被攔截,未持有相應的私鑰也無法解密,確保了內容的機密性。
+
+!!! tip "過程似曾相似"
+
+ **E2EE(端對端加密)與 PGP 的關係**
+
+ E2EE 是一種通訊加密的方法,目的是確保通訊的兩端使用者可以直接傳遞加密訊息,只有發送者和接收者可以解密該訊息。這與 PGP(Pretty Good Privacy)加密是不同層次的概念,PGP 是一種具體的加密技術和標準,經常用於電子郵件和文件的加密和簽名。
+
+ E2EE 是一種加密通訊的方法,旨在確保訊息僅能由通訊的兩端讀取。這種方法需要配合具體的加密技術來實現,例如 PGP(Pretty Good Privacy)就是一種常見的加密技術,經常用於電子郵件加密。端對端加密可以使用 PGP 作為其中一種實作技術,但並不局限於 PGP。其他技術如 **Signal Protocol** 也是常見的 E2EE 實作方式。
+
+ ??? note "補充資料"
+
+ - Signal Protocol
+ - [Signal 協定 - 維基百科,自由的百科全書](https://zh.wikipedia.org/wiki/Signal%E5%8D%8F%E8%AE%AE)
+ - [Signal 採用新加密協定 PQXDH,因應量子電腦時代的安全威脅 | iThome](https://www.ithome.com.tw/news/158852)
+ - [Signal >> Blog >> Quantum Resistance and the Signal Protocol](https://signal.org/blog/pqxdh/)
+
+
+### 驗證數位簽章
+
+PGP 也提供數位簽章功能,以確保訊息來源和內容的完整性。當 Alice 發送訊息時,她可以使用自己的私鑰對訊息做數位簽章。Bob 接收到後,則能使用 Alice 的公鑰驗證簽章,確認訊息確實由 Alice 發出,且在傳輸過程中未被篡改。
+
+1. **驗證身份**:PGP 數位簽章可以用來證明資訊的發送者身份。只有擁有對應私鑰的人才能製作出對應的數位簽章,確保訊息確實來自所聲稱的人。
+2. **確保完整性**:數位簽章還可以確保資料在傳輸過程中未被竄改。任何微小的變動都會導致簽章驗證失敗,這樣收件人就能夠知道資料是否被修改過。
+3. **不可否認性**:一旦文件被簽章,發送者便無法否認自己曾經發送過該文件。這在法律上有時候是非常重要的證明。
+
+#### 應用例子
+
+1. **安全的電子郵件通訊**:假設某公民團體需要向其成員發送機敏信息,例如活動細節或內部報告。組織可以使用 PGP 數位簽章來簽署這些電子郵件。成員在接收電子郵件後,可以用公鑰來驗證,確保該郵件確實來自於組織,且內容未被竄改。
+2. **重要文件的簽署與驗證**:公民團體可能需要發表公開聲明或提交官方文件。這些文件可以經由 PGP 數位簽章來予以簽署,這樣接收方就可以驗證文件的真實性和完整性。舉例來說,一個環保團體提交給政府的抗議書,可以由代表人利用 PGP 簽名,讓政府確信該文件確實是由該團體所發出。
+3. **線上投票系統**:公民團體可能會使用線上工具來進行組織內部的投票。每位成員可以利用 PGP 數位簽章來簽署其投票選票,確保每一票都是合法和真實的。這樣不僅保障了系統的透明度,也避免了假票或選票被篡改的可能性。
+
+!!! note "補充資料"
+
+ - [What is PGP encryption and how does it work? | Proton](https://proton.me/blog/what-is-pgp-encryption)
diff --git a/docs/chapter/e2ee/mails.md b/docs/chapter/e2ee/mails.md
new file mode 100644
index 0000000..38919d5
--- /dev/null
+++ b/docs/chapter/e2ee/mails.md
@@ -0,0 +1,60 @@
+---
+title: 加密電子郵件
+---
+
+# :material-email-lock: 加密電子郵件
+
+在當前數位時代,電子郵件依然是公民團體溝通的重要途徑。然而,未加密的電子郵件容易被攔截、竊取或篡改,帶來個人隱私洩露與資料外流的風險。為了保護機敏資訊,加密電子郵件顯得格外重要。加密電子郵件可保障資料在傳輸過程中的機密性與完整性,確保只有預定接收者能夠讀取並理解訊息內容。
+
+!!! note "補充資料"
+
+ 關於 **E2EE(端對端加密)**、 **PGP** 與**驗證數位簽章**的關係,可以參考「[:material-shield-lock: 加密通訊](./index.md)」章節的介紹。
+
+## 常見的加密電子郵件服務和軟體
+
+1. **ProtonMail**
+ - **描述**:ProtonMail 是一個以隱私保護為主要目標的電子郵件服務,總部位於瑞士,提供端對端加密功能。
+ - **特點**:使用者不需技術背景即可使用,加密過程自動進行。
+
+ [:material-card-account-mail: ProtonMail 官方網站](https://proton.me/mail){ .md-button }
+
+2. **Tuta Mail**
+ - **描述**:Tuta Mail 是一個提供端對端加密與私人郵箱服務的德國公司,強調隱私保護和無廣告體驗。
+ - **特點**:內建加密、快捷簡單、良好的使用者體驗。
+
+ [:material-card-account-mail: Tuta Mail 官方網站](https://tuta.com/){ .md-button }
+
+3. **Mailvelope**
+ - **描述**:Mailvelope 是一種瀏覽器擴充套件,允許使用公開密鑰加密技術來保護電子郵件的內容。
+ - **特點**:與多數電子郵件服務提供者兼容,操作簡單。
+
+ [:material-card-account-mail: Mailvelope 官方網站](https://mailvelope.com/){ .md-button }
+
+4. **GnuPG (GPG)**
+ - **描述**:GnuPG 是一個開放原始碼的加密工具,支援公開密鑰加密技術,用來加密和簽署文件及電子郵件。
+ - **特點**:高度靈活但需要一定的技術背景。
+
+ [:material-card-account-mail: GnuPG 官方網站](https://www.gnupg.org/){ .md-button }
+
+## 技術門檻與操作指南
+
+使用加密電子郵件的技術門檻會隨不同服務和軟體而異。以下是一些普遍步驟,幫助理解如何開始使用:
+
+1. **選擇加密電子郵件服務或軟體**
+ - 若選擇 ProtonMail 或 Tuta Mail,註冊帳戶後即可享受自動加密。
+ - 使用 GnuPG 或 Mailvelope 則需要手動設定和專用操作。
+
+2. **建立與管理密鑰**
+ - 對於使用 GnuPG 等工具的使用者,需首先建立一對密鑰(公開密鑰和私密密鑰)。
+ - 公開密鑰共享給對方,私密密鑰保留在自己設備上。
+
+3. **加密與解密電子郵件**
+ - 使用內建端對端加密的服務,系統會自動加密發送的郵件。
+ - 使用像 GnuPG 的工具時,需手動選擇加密和解密操作。
+
+4. **驗證對方身份**
+ - 使用數位簽章技術來驗證電子郵件發件人的身份,以防止中間人攻擊。
+
+!!! note ""
+
+ 加密電子郵件是保護公民團體在數位溝通中訊息安全的重要手段。即使技術門檻可能看似較高,但隨著越來越多用戶友好的服務推出,這些工具變得越來越容易使用。建議各公民團體根據自身需求,選擇合適的加密方案,以有效提升資安防範能力。
diff --git a/docs/chapter/files_management/backup_archive.md b/docs/chapter/files_management/backup_archive.md
new file mode 100644
index 0000000..abbb54b
--- /dev/null
+++ b/docs/chapter/files_management/backup_archive.md
@@ -0,0 +1,102 @@
+---
+title: 資料備份與封存
+---
+
+# :material-archive-lock: 資料備份與封存
+
+## 資料備份的重要性
+
+資料已是各公民團體運作的重要資產。這些資料包含成員名單、通訊紀錄、捐款人資訊、財務報表及其他機敏資訊。一旦這些資料遺失或被惡意竄改,可能會對團體的運作造成巨大衝擊,甚至導致無法挽回的損失。因此資料備份有幾個重要的面向:
+
+1. **保護資料完整性:**在電腦病毒、勒索軟體和其他網路攻擊日益猖獗的環境下,資料很容易受到威脅。通過定期進行資料備份,即使遭到攻擊,也可以迅速恢復到備份的版本,保證資料完整性。
+2. **減少業務中斷:**資料遺失可能導致業務運作停滯,影響正常的服務提供和團體目標的實現。透過備份可以在短時間內恢復工作,減少業務中斷的風險。
+3. **符合法規要求:**很多法規及合規性要求也強調資料保護及備份的重要性。符合這些要求不僅能降低法律風險,還能提升團體的專業形象。
+4. **預防意外損害:**除了網路攻擊,還有可能面臨自然災害、人為錯誤或者設備故障等風險。備份能確保即使在最糟糕的情況下,依然可以恢復重要資料。
+5. **提高成員信任度:**當團體成員知道他們的個人資料受到妥善保護時,他們對團體會有更高的信任度。這有助於吸引和維持成員,增強團體的凝聚力。
+6. **提供歷史記錄:**將歷史資料保存並定期進行備份可以幫助團體追溯問題來源,並在需要時提供參考,這對於策略制定和問題檢視非常有幫助。
+
+## 備份策略
+
+### 確定關鍵資料
+
+- **識別關鍵資料**:確定組織內部的重要資料,包括文件、資料庫、電子郵件、使用者資料和研究資料等。
+- **分類與評估**:對資料進行分類,評估其重要性和機敏性。關鍵資料應該更為高頻率且更全面地備份。
+
+### 選擇備份頻率
+
+- **日備份**:對於高頻率更新的資料,每日備份可以最大限度地減少資料數據損失。
+- **週備份**:對於更新頻率較低的資料,每週備份可能足以涵蓋大部分需求。
+- **月備份**:對於更新頻率更低的資料,每月備份是一個較為經濟且有效的選擇。
+
+### 選擇備份方法
+
+- **全備份**:完整備份全部資料,但所需時間和儲存空間較大,適合於某些關鍵時間點執行如每月一次。
+- **增量備份**:只備份自上次備份後有變更的資料,節省了時間和儲存空間,但還原時需依次還原所有增量。
+- **差異備份**:只備份自上次全備份後有變更的資料,相較於增量備份,中間步驟減少,但時間和儲存需求增加。
+
+### 選擇備份儲存位置
+
+- **本地備份**:備份至本地存儲設備(如外接硬碟、本地伺服器、NAS),便於快速還原,但有物理損毀風險。
+- **異地備份**:將備份資料存儲於異地(如另一辦公室或資料中心),防範本地災害。
+- **雲端備份**:將資料備份至雲端服務提供商,具備高度擴展性及彈性,但需考慮資料安全及隱私。
+
+### 備份測試與演練
+
+- **定期測試還原**:定期測試備份資料的完整性和還原可行性,確保在需要時備份資料可以可靠地還原。
+- **演練災害恢復計畫**:模擬突發事件,演練完整的資料恢復過程,確認工作流程和技術準備是否到位。
+
+### 備份管理與紀錄
+
+- **設定自動化備份**:使用自動化工具和排程任務,確保備份按計劃執行,而不依賴人工操作。
+- **維護備份紀錄**:保留詳細的備份報告和紀錄,包括備份時間、資料範圍、成功與否等,便於追蹤和稽核。
+
+## 備份檔案加密
+
+進行資料備份是一項必要的措施。然而,備份本身並不足以完全保障資料安全,使用加密技術對備份檔案進行更完善的保護。
+
+### 加密的重要性
+
+1. **保護機敏資料**:加密可以保護您的備份檔案不被未經授權的用戶訪問,確保只有經授權的使用者才能解密和查看資料。
+2. **防止資料洩露**:即使備份檔案落入不法人士手中,如果沒有正確的解密密鑰,對方也無法讀取檔案內容。
+3. **遵守法規要求**:許多國家和地區的法律和規範要求必須對某些類型的資料進行加密處理。
+
+### 加密方式
+
+1. **對稱式加密**:使用單一密鑰來進行加密和解密,如AES(高級加密標準)。對稱式加密速度較快,但需要妥善管理密鑰。
+2. **非對稱式加密**:使用公鑰和私鑰對進行加密和解密,常見的算法如RSA。非對稱式加密的安全性更高,但速度較慢。
+
+### 加密工具與軟體
+
+1. **作業系統內建**:常用的作業系統內建加密軟體,如 BitLocker、FileVault 等。
+2. **開源加密工具**:例如 VeraCrypt、Cryptomator、GnuPG 等,它們不僅免費,且方便一般使用者操作。
+
+### 備份檔案加密步驟
+
+1. **選擇合適的加密工具**:考慮安全性、使用方便性及性能等要素,選擇適合的加密工具。
+2. **產生並保存密鑰**:建立一個強而唯一的密鑰,並妥善保存於安全的地方,例如密碼管理器。
+3. **加密備份檔案**:使用選定的加密工具對備份檔案進行加密操作,通常會有一步一步的操作指引。
+4. **定期檢查與更新**:定期檢查備份檔案的可用性並更新加密密鑰,確保最新的備份安全性。
+
+### 加密與備份管理
+
+1. **多重備份策略**:建議採用備份 3-2-1 策略:保持 3 份資料的副本,儲存於 2 種不同媒介,其中 1 份備份存放在異地。
+2. **版本管理**:對備份檔案進行版本管理,避免新版檔案損壞或丟失舊版資料。
+3. **存取控制**:擬定嚴格的存取控制策略,確保只有經授權的個人或系統能夠執行備份和恢復操作。
+
+## 制定封存策略
+
+不再頻繁使用但需長期保存的資料應有封存策略:
+
+- **資料分類**:根據資料的年齡、使用頻率和法律要求,分類封存資料。
+- **封存期限**:制定封存期限,到期後的資料應進行評價後,決定是否刪除或移入更長期的封存系統。
+- **封存管理**:定期審視和更新封存策略,確保資料依然符合組織需求與法律規範。
+
+## 法規遵循
+
+- **資料保留與刪除規範**:討論可能適用的資料保留與刪除法規,如何確保備份和封存資料符合相關法規要求。
+- **隱私與保護**:説明如何遵循隱私保護法規(如[《個人資料保護法》](https://law.moj.gov.tw/LawClass/LawAll.aspx?PCode=I0050021)),保護備份與封存資料中涉及的個人資訊。
+
+## 文件化和政策制定
+
+- **備份與封存政策**:如何制定書面的備份與封存政策,確保組織內部各部門都遵循統一的標準和流程。
+- **角色與責任分配**:明確各個角色在資料備份與封存過程中的責任,確保不會因人事變動而影響重要資料的保護。
diff --git a/docs/chapter/files_management/files_access.md b/docs/chapter/files_management/files_access.md
new file mode 100644
index 0000000..d92938e
--- /dev/null
+++ b/docs/chapter/files_management/files_access.md
@@ -0,0 +1,174 @@
+---
+title: 檔案存取權限
+---
+
+# :material-folder-account: 檔案存取權限
+
+## 原則
+
+檔案權限管理與帳號權限管理概念類似,可以遵循以下方式來進行。
+
+1. **最小權限原則**:每一位使用者應僅被授予完成其工作所需的最低權限,避免給予不必要的讀取、寫入或執行權限。
+
+ ??? note "情境範例"
+
+ - **情境:**新加入的志工小明需要協助處理捐款者資料。
+
+ - **應用:**
+
+ 1. 管理員應只給予小明存取特定需要處理的捐款者資料區域的權限,而非整個資料庫。
+ 2. 小明只需要讀取和基本編輯權限,而不需完全管理權限。
+ 3. 確保小明無法存取其他與其工作無關的資料或系統功能。
+
+2. **職責分離**:將機敏操作或關鍵功能分配給不同個體,減少內部舞弊或濫用權力的風險。如系統管理員不應同時擁有稽核功能。
+
+ ??? note "情境範例"
+
+ - **情境:**團體中有一位成員負責財務報表的準備,另一位成員負責檢查這些報表。
+
+ - **應用:**
+ 1. 財務管理員能夠編寫和上傳財務報表,但無法審核或批准自身提交的報表。
+ 2. 稽核員僅有檢查及審核報表的權限,無法編輯或刪除報表。
+ 3. 涉及支出批核的系統需由不同人員操作,增加透明度,減少舞弊風險。
+
+3. **基於角色的存取控制**:根據團體內不同角色設置不同的權限範疇。每位使用者只會因應其角色擁有相關權限。
+
+ ??? note "情境範例"
+
+ - **情境:**公民團體內分為「管理層」、「專案小組成員」及「志工」。
+
+ - **應用:**
+ 1. 管理層擁有對所有資料的讀寫權限。
+ 2. 專案小組成員僅能存取與其專案相關的資料。
+ 3. 志工只對其目前工作所需的資料具備讀取權限。
+
+4. **定期權限檢討與更新**:定期檢查和更新所有使用者的權限,確保只有符合當前需要的權限授予給相關人員。這包括移除不再在組織內工作的成員的權限。
+
+ ??? note "情境範例"
+
+ - **情境:**團體中有成員離職或新的成員加入。
+
+ - **應用:**
+ 1. 每季度檢查所有成員的權限,並調整已離職成員的存取權限,即時撤銷。
+ 2. 新成員入職時,根據其角色配置適當權限。
+ 3. 確保權限分配符合當前的組織結構與需求,及時更新並記錄變更。
+
+5. **檔案分類和標籤**:根據檔案的機敏程度和重要性來分類並標籤,例如「公開」、「內部使用」、「機密」等,並設定相應的存取控制措施。
+
+ ??? note "情境範例"
+
+ - **情境:**團體需管理不同重要性的資料,包括活動行程、財務資料、會員資料等。
+
+ - **應用:**
+ 1. 將活動行程標籤為「公開」,任何人可以查看。
+ 2. 財務資料標籤為「內部使用」,僅授權的財務及管理人員可查看。
+ 3. 會員資料標籤為「機密」,只有經授權的特定成員可存取。
+ 4. 設置相應的存取控制措施,確保按等級機密性處理檔案。
+
+6. **記錄與審計**:實施詳細的存取記錄與稽核機制。這包括記錄誰在何時存取了哪些檔案,以及對異常行為進行即時通知和調查。
+
+ ??? note "情境範例"
+
+ - **情境:**發現某份機密會員資料被未經授權的成員存取。
+
+ - **應用:**
+ 1. 實施存取記錄,記錄每位使用者何時存取了哪些資料。
+ 2. 針對機敏資料設定異常行為警示機制,一旦偵測到異常存取立即通知管理員。
+ 3. 以審計機制定期檢查存取記錄,以分析是否存在異常或不當操作,及時採取防範措施。
+
+7. **使用者教育與培訓**:定期進行資安教育與培訓,提高所有成員對於檔案存取權限和數位安全的意識,防止因疏忽或不當操作引起的安全問題。
+
+ ??? note "情境範例"
+
+ - **情境:**新進志工對數位安全意識低,可能造成洩密或不當操作。
+
+ - **應用:**
+ 1. 定期舉辦資安教育與培訓,針對所有成員。
+ 2. 通過不同形式的教學(如線上課程、實體講座)強化其數位安全知識。
+ 3. 教育包含如何正確處理機敏資料、防範釣魚攻擊等。
+ 4. 培訓後進行測試或實際演練操作,驗證學習成果。
+
+8. **資料加密**:對存儲和傳輸中的機敏資料進行加密,以防止未經授權的存取。確保只有持有有效憑證的使用者能夠解密並存取檔案內容。
+
+ ??? note "情境範例"
+
+ - **情境:**團體需通過電子郵件傳送機密會員資料。
+
+ - **應用:**
+ 1. 使用強加密技術對機密資料進行加密,防止傳輸過程中的洩密。
+ 2. 確保僅有收到加密鑰匙的成員可解密和查看內容。
+ 3. 儲存重要文件時,也應使用加密方式保護資料。
+
+9. **條件存取**:根據使用者行為或情境(如地理位置、時間、設備狀態等)來動態調整存取權限,提高靈活性與安全性。
+
+ ??? note "情境範例"
+
+ - **情境:**某成員於非工作時間嘗試從異常地點登錄並存取機敏資料。
+
+ - **應用:**
+ 1. 設定系統,只允許特定工作時間和受信任的位置進行存取操作。
+ 2. 設定異常條件如深夜或海外登錄會觸發額外驗證(如多因素身份驗證)。
+ 3. 當偵測到異常的存取行為,系統會自動阻止並通報管理員。
+
+## 其他相關可參考原則
+
+### 機密等級
+
+#### 機密資料(Top Secret)
+
+- 涉及國家安全或機構核心機密。
+- 只有極少數授權人可以存取。
+- 需加密存儲和傳輸。
+
+#### 內部機密資料(Confidential)
+
+- 涉及機敏或關鍵業務資料。
+- 僅限於特定內部人員存取。
+- 需加密存儲。
+
+#### 內部資料(Internal Use Only)
+
+- 涉及內部運作的資料。
+- 內部員工可存取,但不可對外分享。
+
+#### 公開資料(Public Use)
+
+- 可以公開於網路或其他公開管道分享。
+- 該類資料不需特別的保護措施,但需確保資料準確性和完整性。
+
+### 存取控制
+
+#### 最小權限原則(Principle of Least Privilege)
+
+- 任何使用者僅能存取其工作所需的最少部分資料。
+- 定期審查和更新使用者的存取權限。
+
+#### 分離職能(Segregation of Duties)
+
+- 確保不同人員負責不同職能,以降低風險。
+- 避免單一人員擁有過多的權限。
+
+#### 資料壽命周期(Data Lifecycle Management)
+
+1. **建立(Creation)**:資料的產生或收集。
+2. **儲存(Storage)**:資料歸檔和保存,必須考慮存取權限和加密措施。
+3. **使用(Usage)**:資料的使用和檢索,需要定義清晰的使用規範。
+4. **傳輸(Transfer)**:資料在不同系統或使用者間的傳送,需加密和認證。
+5. **銷毀(Disposal)**:資料不再需要時的安全刪除或銷毀,避免資料外洩。
+
+### 資料標記
+
+#### 標籤與分級(Labeling and Classification)
+
+- 所有資料應依照其機密等級進行標記。
+- 範例:「機密」、「內部」、「公開」。
+
+### 加強政策和教育
+
+#### 政策制定(Policy Development)
+
+- 編寫並發布資料分級和存取控制政策。
+
+#### 員工教育(Staff Training)
+
+- 定期進行資安教育訓練,提高員工防範意識。
diff --git a/docs/chapter/files_management/index.md b/docs/chapter/files_management/index.md
new file mode 100644
index 0000000..87cf46b
--- /dev/null
+++ b/docs/chapter/files_management/index.md
@@ -0,0 +1,16 @@
+---
+icon: material/folder-open
+title: 資料管理與備份
+---
+
+# :material-folder-open: 資料管理與備份
+
+在現代數位時代,公民團體需要妥善與安全的管理和保護他們的資料,資料管理與備份是資訊安全的基本之一。
+
+## 簡介說明
+
+本章節將針對三個主題:「[檔案存取權限](./files_access.md)」、「[資料備份與封存](./backup_archive.md)」、以及「[更新軟體](./software_update.md)」。
+
+- 「檔案存取權限」是確保資料安全的第一道防線。公民團體應設定嚴格的存取權限,確保只有授權人員能夠存取機敏資料,並定期審查這些權限以避免濫用。此外,應實施多因素身份驗證(MFA)來提升帳戶安全性。
+- 「資料備份與封存」是避免資料遺失的重要措施。公民團體應定期進行資料備份,將重要資料存儲在多個不同位置,如本地儲存裝置或雲端服務。並且,應制定資料備份與封存政策,確保歷史資料安全保存與有效管理。
+- 「保持軟體」的更新是防禦網路攻擊的關鍵。所有使用的軟體,包括操作系統和應用程式,都應設定自動更新或定期手動更新,確保安裝最新的安全修正,以防範潛在的安全漏洞。
diff --git a/docs/chapter/files_management/software_update.md b/docs/chapter/files_management/software_update.md
new file mode 100644
index 0000000..4666f49
--- /dev/null
+++ b/docs/chapter/files_management/software_update.md
@@ -0,0 +1,35 @@
+---
+title: 更新軟體
+---
+
+# :material-update: 更新軟體
+
+## 為什麼更新軟體很重要
+
+1. 修補安全漏洞:軟體公司經常會發現並修補軟體中的安全漏洞。如果你不更新軟體,這些漏洞就會成為駭客攻擊的入口,讓你的電腦或手機更容易遭受攻擊。
+2. 獲得新功能:除了安全性,更新通常還會帶來新的功能和改進,提升使用者體驗和效率。
+3. 改善性能:軟體更新也常常包含修正錯誤和改善性能的更新,這能讓你的設備運行得更順暢。
+4. 潛在問題:如果不更新軟體,可能會遇到以下問題:
+
+ - **安全風險**:未更新的軟體很容易成為駭客的目標,導致個人資料外洩或是設備感染惡意軟體。
+ - **性能問題**:未更新的軟體可能會出現崩潰或是運行速度變慢的情況。
+ - **相容性問題**:隨著其他軟體和硬體更新,未更新的軟體可能會出現相容性問題,導致無法正常使用。
+!!! warning "常見誤解"
+
+ 1. **更新很麻煩**:很多人覺得更新軟體很花時間,其實大多數更新可以自動進行,並且花不了幾分鐘。
+ 2. **更新會影響使用**:一些人擔心更新後會改變他們熟悉的使用界面或是功能,事實是多數更新都設計得很人性化,不會讓你感到不適應,而且新的功能往往更好用。
+ 3. **不更新也沒關係**:有些人認為只要小心使用,就不需要經常更新軟體,但這是一種錯誤的觀念,因為許多攻擊並不需要使用者的操作即可自動發動。
+
+## 盜版軟體使用風險
+
+使用盜版軟體存在多方面的風險。
+
+1. **惡意軟體的威脅**:許多盜版軟體內含有病毒、間諜軟體或其他惡意程式,可能竊取你的個人資料或使你的電腦運作不正常。
+2. **缺乏安全更新**:盜版軟體無法獲得官方的安全更新和修補,這使你的系統容易受到新的安全漏洞攻擊。
+3. **法律風險**:使用盜版軟體是違法的,可能會面臨罰款或法律訴訟。
+4. **軟體不穩定**:盜版軟體常常修改過程式碼,可能會導致軟體運行不穩定或崩潰,影響你的日常工作。
+5. **缺乏技術支援**:當你使用盜版軟體時,無法獲得來自官方技術支援,遇到問題時可能無處求助。
+
+!!! tip "科技濃湯"
+
+ - 如果因為預算問題,可以考慮洽詢「[科技濃湯](https://www.techsouptaiwan.org/)」給非營利組織的捐贈和折扣方案。
diff --git a/docs/chapter/index.md b/docs/chapter/index.md
new file mode 100644
index 0000000..070d8e4
--- /dev/null
+++ b/docs/chapter/index.md
@@ -0,0 +1,43 @@
+---
+title: 課程章節內容簡介
+summary: 本課程涵蓋威脅建模、裝置與身份安全、網路使用行為、加密通訊、帳號管理、資料管理與備份,以及海外出差安全等主題,全面提升資訊安全技能,幫助學員保護個人和組織的重要資料和資訊安全。
+description: 本課程涵蓋威脅建模、裝置與身份安全、網路使用行為、加密通訊、帳號管理、資料管理與備份,以及海外出差安全等主題,全面提升資訊安全技能,幫助學員保護個人和組織的重要資料和資訊安全。
+icon: octicons/book-16
+---
+
+# :octicons-book-16: 章節內容
+
+???+ abstract "學習歷程:「章節內容」"
+
+
+
+ 您目前在「[章節內容]」,這裡收錄基本資訊安全相關的課程與教材。(完整流程:「[章節內容]」、「[操作手冊]」、「[政策制定]」、「[狀態評估]」、「[關懷與諮詢]」)
+
+ [章節內容]: ../chapter/index.md
+ [操作手冊]: ../user_guide/index.md
+ [政策制定]: ../policy/index.md
+ [狀態評估]: ../assessment/index.md
+ [關懷與諮詢]: ../support/index.md
+
+資訊安全課程項目提供了全面的知識和技能,幫助學員保護個人和組織的重要資料和資訊安全。
+
+## 主題簡介
+
+1. [威脅建模](./threat_modeling_class.md)(Threat modeling):這門課程將教學員如何識別與評估資訊安全威脅,並制定有效的防禦策略。
+2. [裝置安全](./devices.md):這門課程專注於如何保護硬體裝置,包括防止硬體被竊取以及避免硬體級別的攻擊。
+3. [身份驗證](./profile/index.md):學員將學習如何使用密碼管理器、建立強密碼,以及實施雙重或多因子身份驗證,以提高身份識別的安全性。
+4. [網路使用行為](./network/index.md):這門課程探討如何在網路上安全行事,包括隱私瀏覽技巧和防範釣魚攻擊的方法。學員將學會使用 VPN 和瞭解網路安全原則,以便安全地使用公共 Wi-Fi 和其他網路連線。
+5. [加密通訊與電子郵件](./e2ee/index.md):這門課程將教導學員如何運用加密技術來保護通訊和電子郵件,防止未經授權的訪問。
+6. [帳號管理](./account/index.md):這門課程強調如何有效管理帳號,包括帳號權限管理、活動追蹤和監控的方法。
+7. [資料管理與備份](./files_management/index.md):學員將學習如何有效地管理和保護組織的資料,包括檔案存取權限控制、資料分層管理、備份策略和軟體更新的方法。
+8. 海外出差:這門課程將提供學員在海外出差期間維持資料和身份安全的實用建議和實作方法。
+
+## 主題與子課程
+
+
diff --git a/docs/chapter/network/browser_privacy.md b/docs/chapter/network/browser_privacy.md
new file mode 100644
index 0000000..ac14244
--- /dev/null
+++ b/docs/chapter/network/browser_privacy.md
@@ -0,0 +1,155 @@
+---
+title: 隱私瀏覽行為
+---
+
+# :simple-googlechrome: 隱私瀏覽行為
+
+## 瀏覽器選擇
+
+瀏覽器已是我們每日探索世界、瞭解新知時所使用到的第一個工具,我們也需要透過瀏覽器來使用雲端服務來完成日常工作,因此瀏覽器有著無比重要的存在,也是駭客常常鎖定攻擊我們的重要途徑之一。
+
+以下是一些主要的隱私瀏覽器,以及它們的特色比較:
+
+### :simple-firefoxbrowser: Firefox
+
+{++:first_place: 擴充彈性最高++}
+
+- **隱私保護級別**:高。Firefox 預設啟用了「[加強型追蹤保護功能]」,可以阻擋廣告追踪和第三方 Cookie。
+- **附加元件與擴充功能**:Firefox 支持多種隱私保護附加元件(如 uBlock Origin、Privacy Badger 等),用戶可以根據需要進一步加強隱私保護。
+- **透明及開放源碼**:作為一個開放源碼的瀏覽器,社群和安全專家可以檢查和審核其源碼,確保沒有惡意或隱私侵害的功能。
+- **隱身模式**:提供標準的隱身模式,不保存瀏覽歷史、 Cookie 和搜尋紀錄。
+
+[加強型追蹤保護功能]: https://support.mozilla.org/zh-TW/kb/enhanced-tracking-protection-firefox-desktop
+
+### :simple-brave: Brave
+
+{++:first_place: 綜合平衡(隱私與性能)++}
+
+- **內建廣告阻擋**:自帶廣告阻擋功能,防止追踪並提高頁面加載速度。
+- **隱私保護級別**:非常高。Brave 專注於隱私保護和去中心化技術,避免第三方追踪。
+- **Tor 整合**:內建能夠使用 Tor 網路的隱私視窗,進一步提升匿名性。
+- **IPFS 星際檔案**:整合 [IPFS]([星際檔案系統]),提供去中心化的檔案分享與存取,提升網路安全性與資料持久性。
+
+[IPFS]: https://ipfs.tech/
+[星際檔案系統]: https://zh.wikipedia.org/zh-tw/%E6%98%9F%E9%99%85%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F
+
+### :simple-torbrowser: Tor 瀏覽器
+
+{++:first_place: 最強隱私保護++}
+
+- **匿名瀏覽**:通過 Tor 網路將您的流量經過多個 :simple-torproject: 洋蔥網路中繼點(Relay)進行加密,極大提高了匿名性和隱私保護。
+- **預設隱私保護**:完全專注於隱私保護的設置,預設阻擋追蹤及腳本。
+- **進階隱私需求**:適合高隱私需求的用戶(如記者、研究人員等),但可能會降低瀏覽速度。
+
+## 隱私保護附加元件
+
+瀏覽器附加元件(Browser Extensions),這些附加元件可以防止網站和第三方追踪使用者的瀏覽行為,從而保護個人資料隱私。此外有效的廣告阻擋工具不僅能提升網頁瀏覽速度,還能減少惡意廣告軟體的風險。
+
+!!! note ""
+
+ :simple-brave: Breve 與 :simple-googlechrome: Chrome 是同一架構的瀏覽器,可以直接取用 :simple-googlechrome: Chrome 的附加元件使用。
+
+### uBlock Origin
+
+這是一款高效的廣告阻擋器,可以阻止惡意網頁、釣魚網站和跟踪器。
+
+[:simple-googlechrome: Chrome](https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm) | [:simple-firefoxbrowser: Firefox](https://addons.mozilla.org/zh-TW/firefox/addon/ublock-origin/)
+
+### Privacy Badger
+
+由電子前哨基金會(EFF)開發,它可自動學習並阻止跟踪機制,以保護您的隱私。
+
+[:simple-googlechrome: Chrome](https://chromewebstore.google.com/detail/privacy-badger/pkehgijcmpdhfbdbbnkijodmdjhbjlgp) | [:simple-firefoxbrowser: Firefox](https://addons.mozilla.org/zh-TW/firefox/addon/privacy-badger17/)
+
+### Cookie AutoDelete
+
+自動刪除不必要的 Cookie,只有您信任且在白名單中的網站才能保存 Cookie,有效保護隱私。
+
+[:simple-googlechrome: Chrome](https://chromewebstore.google.com/detail/cookie-autodelete/fhcgjolkccmbidfldomjliifgaodjagh) | [:simple-firefoxbrowser: Firefox](https://addons.mozilla.org/zh-TW/firefox/addon/cookie-autodelete/)
+
+### ClearURLs
+
+此附加元件功能將自動移除網址中的追蹤元素,以幫助保護您在瀏覽網路時的隱私。
+
+[:simple-googlechrome: Chrome](https://chromewebstore.google.com/detail/clearurls/lckanjgmijmafbedllaakclkaicjfmnk) | [:simple-firefoxbrowser: Firefox](https://addons.mozilla.org/zh-TW/firefox/addon/clearurls/)
+
+## 瀏覽模式
+
+### 一般瀏覽器
+
+如 :simple-brave: Brave、:simple-googlechrome: Chrome、:simple-firefoxbrowser: Firefox、:simple-safari: Safari 的 :material-incognito: 無痕瀏覽(Incognito Mode)或隱私瀏覽模式(Private Browsing)目的是提高用戶的隱私性。
+
+#### 主要特點和其限制
+
+1. **本地歷史不保存**:瀏覽器不會記錄您的瀏覽歷史、下載記錄、Cookies 和網站資料。
+2. **暫時性資料清理**:在無痕瀏覽模式中,您所訪問的網站數據資料和表單填寫的資訊會在關閉窗口後自動清除。
+3. **分離瀏覽階段(Session)**:每次開啟無痕瀏覽模式都是一個新的瀏覽階段,與一般模式互不影響。
+
+#### 不足與限制
+
+1. **不匿名**:{==無痕瀏覽模式並不是匿名模式==}。您的網路行為仍可被網路服務供應商(ISP)、公司網路管理員、網站及追蹤器監視。
+2. **未加密**:無痕瀏覽模式不會加密您的網路流量,因此仍易受網路攻擊,例如中間人攻擊(Man-in-the-Middle Attack)。
+3. **附加元件**:某些瀏覽器附加元件或插件可能仍能辨識和記錄您的活動。
+4. **下載文件**:通過無痕瀏覽模式下載的文件仍會保留在您的電腦上,它不會自動刪除已下載的內容。
+5. **帳戶登錄**:{==如果您在無痕模式下登錄您的帳戶,該網站仍然可以記錄您的活動,只是不會保存在本地瀏覽器的歷史記錄中。==}
+6. **惡意軟件防護**:無痕模式並不能保護您免受惡意軟件攻擊或釣魚詐騙。
+
+### Tor 瀏覽器
+
+當使用 Tor 瀏覽器作為隱私瀏覽模式時,使用者的網路流量會經過多層次的加密,並通過一系列全球志工運營的中繼點(Relays),使監視、追蹤或篡改使用者的流量變得極為困難。
+
+#### 主要特點和優點
+
+1. **匿名性強**:Tor 隨機選擇多個中繼點,使得追蹤數據來源非常困難。
+2. **防止流量分析**:Tor 可以防止第三方觀察您正在訪問哪些網站,即使他們可以查看您的網路流量。
+3. **穿透審查**:能夠繞過某些國家或網路管理者的網路封鎖和審查措施。
+
+#### 不足和限制
+
+1. **速度較慢**:由於數據封包資料需要通過多個中繼點,網路速度通常會比一般瀏覽器慢。
+2. **有限的隱私**:Tor 無法完全隱藏使用者的身份,尤其是在使用不安全的網站或者安裝了非官方插件的情況下。
+3. **不適用於所有用途**:例如,使用 Tor 進行大型文件下載或串流媒體服務可能不那麼實用,而且網站可能會禁止來自 Tor 節點的訪問。
+4. **法律風險**:在部分國家或地區,使用 Tor 可能會引起法律問題,甚至遭遇政府監控。
+
+#### 適用情境
+
+- **保護個人隱私**:例如,記者與信息來源保持聯繫時可避免被追蹤。
+- **繞過審查**:在言論受限的國家,使用者可藉此訪問被封鎖的網站。
+- **隱藏 IP 地址**:對於一些對 IP 地址限制機敏的活動,使用者可以利用 Tor 隱藏真實 IP。
+
+## 搜尋引擎
+
+這些搜尋引擎都能夠在不同程度上保護使用者的隱私並提供良好的搜尋體驗,公民團體可以根據實際需要選擇最適合的搜尋引擎,尤其對於公民團體來說,使用注重隱私的搜尋引擎可以有效保護成員的個人資料及搜尋活動。除了使用隱私友善的搜尋引擎,也可結合其他安全措施,如使用加密通訊工具和維護良好的數位使用習慣。
+
+1. **DuckDuckGo**
+ - **特點**:DuckDuckGo 不儲存任何可識別用戶身份的資料,不追蹤你的搜尋歷史,而且使用加密技術來保護搜尋查詢。
+ - **優勢**:簡單易用,適合大部分用戶,是注重隱私搜尋的首選之一。
+ - :octicons-arrow-right-16:
+
+2. **Startpage**
+ - **特點**:Startpage 使用 Google 的搜尋結果,但不儲存任何個人資料或搜尋歷史。它還會隱藏使用者的IP地址,提供匿名的搜尋體驗。
+ - **優勢**:提供高質量的搜尋結果,同時確保用戶的隱私不被泄露。
+ - :octicons-arrow-right-16:
+
+3. **Qwant**
+ - **特點**:Qwant 是一家總部位於歐洲的隱私友好型搜尋引擎,不會追蹤用戶或個人化搜尋結果。
+ - **優勢**:符合歐盟的隱私法律,是值得信賴的搜尋工具。
+ - :octicons-arrow-right-16: (目前臺灣、日本、新加坡無法使用)
+
+4. **Searx**
+ - **特點**:Searx 是一個開源的隱私搜尋引擎,允許用戶自己設置並管理其服務,避免集中式搜尋引擎的資料收集問題。
+ - **優勢**:高度可配置,適合技術能力較強的用戶或需要自主持續引擎的團體。
+ - :octicons-arrow-right-16:
+
+5. **Brave Search**
+ - **特點**:Brave Search 是由 Brave 瀏覽器團隊開發的,強調隱私和去中心化,不會追蹤用戶的搜尋歷史。
+ - **優勢**:無廣告追蹤,提供自主生成的搜尋結果。
+ - :octicons-arrow-right-16:
+
+!!! tip "調整預設瀏覽器"
+
+ - 可在瀏覽器設定將以上推薦的瀏覽器設定為預設搜尋項目來使用。
+
+## 定期更新
+
+瀏覽器現在都會在背景中自動更新到最新版本,但是某些情況下是需要{==重新啟動瀏覽器==}才算是完整安裝到最新版本。當瀏覽器提醒需要重新啟動時,請儘快完成,避免暴露在危險的網路環境中。
diff --git a/docs/chapter/network/index.md b/docs/chapter/network/index.md
new file mode 100644
index 0000000..42aeb3e
--- /dev/null
+++ b/docs/chapter/network/index.md
@@ -0,0 +1,52 @@
+---
+icon: material/microsoft-internet-explorer
+title: 網路使用行為
+---
+
+# :material-microsoft-internet-explorer: 網路使用行為
+
+## 隱私瀏覽行為
+
+本章節的目的在於幫助組織成員提升他們在上網過程中的隱私保護和釣魚攻擊防範能力,從而提高整體資訊安全水平。
+
+### 私密瀏覽模式
+
+- **介紹並引導使用者了解私密瀏覽模式**:例如 Chrome 的無痕模式,Firefox 的私密瀏覽。
+- **使用場景與限制**:說明這些模式如何避免瀏覽記錄被保存,但仍會被 ISP 及網站追蹤。
+
+### 使用 VPN(虛擬私人網路)
+
+- **VPN 的基本概念與用途**:提供加密的連接,隱藏實際 IP 地址。
+- **選擇和使用安全 VPN 服務**:如何選擇可靠、無記錄的 VPN 服務。
+
+### 安全的搜尋引擎與瀏覽器
+
+- **推薦注重隱私的搜尋引擎**:例如 DuckDuckGo、Startpage。
+- **安全瀏覽器工具與插件**:如 Tor 瀏覽器、uBlock Origin。
+
+### Cookie 和追蹤技術
+
+- **理解與管理 Cookie**:如何查看、刪除及設置 Cookie 的使用權限。
+- **避免追蹤的工具**:介紹如何使用反追蹤附加元件與設置,如 Privacy Badger。
+
+## 釣魚、詐騙
+
+### 釣魚詐騙的認識與辨識
+
+- **釣魚詐騙的基本概念**:說明釣魚攻擊的形式,比如電子郵件釣魚、網站偽造。
+- **如何辨識釣魚郵件和網站**:檢查發件人地址,不輕易點擊不明鏈接,警惕異常的語言和內容。
+
+### 常見手法與案例
+
+- **電子郵件和簡訊詐騙**:防範偽造合法機構(如銀行、政府)進行詐騙。
+- **社交工程攻擊**:利用人性弱點進行詐騙,如冒充同事或朋友。
+
+### 回應與應對策略
+
+- **發現釣魚詐騙的應對措施**:不要點擊鏈接或下載附件,直接刪除可疑郵件。
+- **報告和封鎖可疑帳號**:如何向相關組織或 IT 部門舉報可疑訊息。
+
+### 教育與培訓
+
+- **定期資安培訓**:強化團隊成員對於釣魚與詐騙的意識。
+- **自我測試與模擬攻擊**:利用工具進行模擬測試,提高防範意識。
diff --git a/docs/chapter/network/phishing.md b/docs/chapter/network/phishing.md
new file mode 100644
index 0000000..33e1377
--- /dev/null
+++ b/docs/chapter/network/phishing.md
@@ -0,0 +1,72 @@
+---
+title: 釣魚、詐騙
+---
+
+# :material-flip-to-back: 釣魚、詐騙
+
+釣魚和詐騙是指不法分子利用{==社交工程技術==},假冒合法可信的實體或個人,騙取受害者的個人資料、金錢或其他機敏資訊。
+
+!!! question "「一般釣魚(Phishing)」與「魚叉式釣魚(Spear phishing)」攻擊有什麼不同?"
+
+ 這裡不是探討實際的魚釣行為,而是針對攻擊手法目前可分為兩種型態:目標範圍不同、攻擊方法不同。
+
+ **目標範圍不同**
+
+ - **一般釣魚攻擊**通常是大規模且無差別的,攻擊者發送大量的電子郵件或訊息給許多人,期望能騙到一部分不注意的受害者。這種方法比較**隨機**,攻擊內容不針對特定個人或組織。
+ - **魚叉式釣魚攻擊**則是高度針對性的,攻擊者會專門挑選特定個人或組織作為目標。他們會進行詳細的研究,收集有關目標的資訊,並利用這些資訊設計較有說服力和**精準**的攻擊。
+
+ **攻擊方法不同**
+
+ - **一般釣魚攻擊**的方法常見於使用虛假網站、電子郵件或訊息,誘使受害者輸入機敏資料(例如帳號密碼、信用卡資訊等)或下載惡意軟體。
+ - **魚叉式釣魚攻擊**則是更加{==個人化==},攻擊者會根據針對目標的興趣、職位、公司資訊等等來特製訊息,使受害者更容易上當。例如,攻擊者可能會模仿目標受害者的朋友或同事發送電子郵件,內容可能提到受害者熟悉的事情或目前正在進行的項目。
+
+## 辨識釣魚、詐騙的風險常見的手法
+
+1. **假冒知名機構**:收到看似來自知名機構(如銀行、政府、公司)的電子郵件或訊息,要求點擊連結或提供個人資料。
+2. **可疑連結和附件**:電子郵件內附有不明連結或附件,點擊後會被要求登入或下載某些應用程式。
+3. **緊急或誘人的訊息**:內容可能{==聲稱有緊急事態需要立即處理==},或者提供看似極具吸引力的優惠。
+4. **不自然的語法和拼字錯誤**:電子郵件或訊息的{==語法、語意錯誤多==},或使用過於正式或不常見的詞彙。
+5. **不明來源的訊息**:來自於陌生人或出乎意料的訊息,特別是不曾聯絡的信箱或平台發送。
+6. **要求私人資料**:訊息中要求提交身份證號、信用卡號、密碼等機敏資訊。
+7. **虛假網站**:被引導到與知名網站幾乎一模一樣的虛假網站,要求輸入登入資訊。
+8. **撥打可疑電話號碼**:訊息中要求撥打一個不認識的電話號碼進行確認。
+9. **無關的主題或吸引眼球的標題**:含有過於誇張的標題來吸引受害者點開。
+10. **多次發送**:同一內容訊息多次重複發送,以增強說服力。
+
+## 提防釣魚、詐騙的方法
+
+1. **謹慎處理不明來歷的訊息**:不輕易點擊電子郵件中的連結,尤其是不知名的發件人。
+2. **驗證發信人**:仔細檢查發信人的電子郵件地址,是否與官方地址一致。
+3. **獨立驗證內容**:若涉及重要機構或財務信息,可通過{==官方渠道==}或{==其他關係聯絡人==}再次確認信息的真實性。
+4. **安裝安全軟體**:安裝並定期更新防病毒軟體和防火牆。
+5. **使用雙重驗證**:啟用雙重驗證增強帳戶的安全性。
+6. **定期更新密碼**:定期更換密碼,避免使用相同密碼於多個帳戶。
+7. **提高警覺**:受教育於最新的釣魚、詐騙手法,提高警覺。
+8. **報告異常情況**:{==發現可疑的訊息或網站,及時報告給組織內部資安負責人==}。
+9. **慎重分享資訊**:在社交平台上不要過度分享個人資訊,降低風險被釣魚者利用。
+10. **教育培訓**:定期進行資安教育,讓團體成員了解最新的資安風險及防範措施。
+
+## 針對公民團體的釣魚、詐騙舉例
+
+1. **冒充政府或非政府組織的通知**:收到假冒政府或相關 NGO / NPO 的資助或活動通知,要求提供組織資料。
+2. **誘人的捐助優惠**:聲稱若提供某些資訊,將獲得大型補助或捐款。
+3. **偽裝成志工、實習生申請**:假冒志工、實習生申請加入,並要求組織提供機敏資料。
+4. **註冊活動詐騙**:假冒註冊活動確認郵件,要求填寫個人資料。
+5. **假冒調查研究**:偽裝成調查機構要求公民團體提供資料,以進行「研究」。
+6. **夥伴合作詐騙**:假冒成合作夥伴邀請洽談,並要求分享項目計畫書或其他機敏文件。
+7. **網頁流量提升詐騙**:聲稱能幫助提升團體的網站訪問量或搜索排名,誘騙購買服務。
+8. **電子支付詐騙**:偽裝成進行款項支付的郵件,要求更新付款資訊。
+9. **篡改捐款路徑**:提供偽造的捐款連結誘騙捐款轉往假賬戶。
+10. **資料收集釣魚**:通過假網站收集組織內部個人資料,甚至登錄公民團體內部系統。
+
+!!! danger "第一時間應採取的行動"
+
+ 當公民團體懷疑遭遇「釣魚」或「詐騙」時,第一時間應採取以下行動:
+
+ 1. **保持冷靜,不立即回應**:無論是收到可疑的電子郵件、簡訊或電話,請勿急於回應,避免在第一時間泄露機敏資訊。
+ 2. **不點擊可疑連結或附件**:{==若訊息中包含連結或附件,請勿點擊或下載==}。這可能是惡意軟體,會對您的設備和資料造成危害。
+ 3. **仔細檢查信息**:檢查發信人的電子郵件地址和內容的語法及拼字。大多數釣魚攻擊往往會有拼字或語法錯誤,或使用不尋常的電子郵件地址。
+ 4. **與相關機構求證**:若收到聲稱來自銀行、政府機構或其他重要單位的信息,直接聯絡這些機構的官方客服或支援部門確認信息的真實性,而不是通過訊息中提供的聯絡方式。
+ 5. **報告可疑活動**:向團體內部資安負責人或 IT 部門報告該可疑資訊。他們可以進行進一步的調查並採取相應措施。
+ 6. **啟動網路安全程序**:檢查是否有其他組織成員也接收到類似訊息,並啟動內部預設的網路安全程序(如更新密碼,啟動兩步驟驗證等)。
+ 7. **培訓和教育**:針對釣魚和詐騙攻擊,定期對組織成員進行培訓和教育,提高整體資安意識和辨識能力。
diff --git a/docs/chapter/network/vpn.md b/docs/chapter/network/vpn.md
new file mode 100644
index 0000000..8f9734d
--- /dev/null
+++ b/docs/chapter/network/vpn.md
@@ -0,0 +1,69 @@
+---
+title: VPN
+---
+
+# :material-security-network: VPN
+
+VPN(Virtual Private Network,虛擬私人網路)是一種技術,通過建立加密連接,將使用者的網路流量重定向至遠端伺服器,使其看起來像是從該伺服器訪問網際網路。這能夠提高網路隱私和安全,避免資料數據封包被未授權者截取或監視。
+
+以下是 VPN 的三個主要功能:
+
+1. **隱藏 IP 位址**:VPN 可以掩藏使用者的真實 IP 位址,取而代之的是伺服器的 IP 位址,使得使用者的真實位置和身份更難被追蹤。
+2. **傳輸數據加密**:VPN 會對使用者的網路流量進行加密,這意味著即使數據在傳輸過程中被攔截,也很難被解讀。
+3. **繞過網路封鎖**:透過 VPN,使用者可以繞過地區網路限制和審查制度,訪問被封鎖的網站和服務。
+
+## 挑選合適的 VPN
+
+### 隱私政策
+
+- **無記錄政策**:選擇不記錄使用者活動的 VPN,這樣即便伺服器遭受入侵,用戶的瀏覽紀錄也不會洩露。
+- **透明度報告**:某些 VPN 服務會定期發佈透明度報告,詳細說明他們如何處理用戶傳輸數據和政府要求,這能增加選擇該 VPN 的信賴感。
+
+### 伺服器和位置
+
+- **多樣的伺服器位置**:選擇伺服器覆蓋面廣、位置分布多樣的 VPN 服務,能提供更多繞過封鎖的可能性。
+- **高速伺服器**:確保所選 VPN 具有足夠的頻寬和較好效能的伺服器,以避免因連結過慢而影響使用體驗。
+
+### 安全功能
+
+- **進階加密技術**:選擇使用 AES-256 等行業標準高級加密技術的 VPN 服務,確保資料傳輸過程的安全。
+- **自動斷線保護(Kill Switch)**:若 VPN 連接意外中斷,自動斷線功能能夠立即切斷使用者的網路連接,避免傳輸數據暴露在不安全的環境中。
+- **防 DNS 洩漏**:確保 VPN 具有防 DNS 洩漏功能,防止網域名解析請求暴露真實位址。
+
+## VPN 正確的使用情境
+
+### 訪問被封鎖的網站和服務
+
+- **新聞網站**:在嚴格審查的國家,公民團體可以利用 VPN 獲取被封鎖的國際新聞。
+- **社群網站**:繞過封鎖,繼續在 Twitter、Facebook 等社群網站平台運作,維持組織的對外溝通管道。
+- **電子郵件服務**:如 Gmail 被屏蔽時,可以透過 VPN 繞過限制,繼續運作電子郵件。
+
+### 保護流量隱私
+
+- **公共 Wi-Fi 安全**:在咖啡廳或公共場所使用不安全的 Wi-Fi 時,VPN 可保護個人和組織的隱私。
+- **機敏訊息**:處理包含組織成員和活動計畫等機敏訊息時,投稿或聯絡關係人等工作都需要 VPN 的保護。
+
+### 避免被政府監控
+
+- **民主活動**:在進行機敏的民主活動或抗議時,不同地點的抗議者可同時使用 VPN 保持線上活動隱私。
+
+## VPN 不足或是誤解使用的地方
+
+!!! danger "VPN 不足或是誤解使用的地方"
+
+ 儘管 VPN 具有多重優點,但仍需注意其不足及誤解,以避免不當使用。
+
+ ### VPN 不是萬能的隱私工具
+
+ - **未完全匿名**:即使使用 VPN,{==也不能達到完全匿名==},服務提供商仍能追蹤使用者流量來源及目的地。
+ - **數據封包洩漏風險**:一些 VPN 服務不夠安全,其加密技術可能不夠強,甚至會記錄並出售使用者數據。
+
+ ### 不適當使用 VPN 的後果
+
+ - **速度降低**:過度依賴 VPN 可能導致連接速度顯著下降,影響正常的工作流程。
+ - **法律風險**:在某些國家,使用 VPN 可能違法,進而導致法律問題。
+
+ ### VPN 合規性問題
+
+ - **免費 VPN 的風險**:免費 VPN 通常依賴廣告或其他方法盈利,可能涉及隱私風險。
+ - **誤信假 VPN**:市面上有不少假冒的 VPN 服務,專門用來收集使用者數據或進行詐騙。
diff --git a/docs/chapter/network/wifi.md b/docs/chapter/network/wifi.md
new file mode 100644
index 0000000..4e413d3
--- /dev/null
+++ b/docs/chapter/network/wifi.md
@@ -0,0 +1,59 @@
+---
+title: 網路與 Wi-Fi
+---
+
+# :material-wifi-check: 網路與 Wi-Fi
+
+在現今數位時代,網路與 Wi-Fi 已成為我們生活中不可或缺的一部分。了解這些技術的基本知識可幫助我們在日常生活中提高資訊安全,避免潛在的威脅。
+
+## 網路的基本知識
+
+1. **ISP(網路服務提供者)**:ISP 是一種提供網路服務的公司,例如:中華電信、遠傳電信或是家裡有線電視寬頻網路等。透過 ISP,我們可以將自己的設備連接到全球網路。
+2. **IP 位址**:每一台連上網路的設備都有一個專屬的 IP 位址,用以識別和定位該設備。IP 位址可分為 IPv4 和 IPv6 兩種類型。
+3. **DNS(域名系統)**:DNS 將我們易於記憶的網域名稱(如 www.example.com)轉換為 IP 位址,以便我們可以訪問網站。
+4. **防火牆**:防火牆是保護網路安全的重要設備,通過檢查進出網路的資料包來過濾並阻止潛在的威脅。
+5. **加密**:加密技術如 SSL/TLS 用於保護網上傳輸的資料(HTTPS),確保資料在傳送過程中不被破解或竊聽解譯。
+
+## Wi-Fi 的基本知識
+
+1. **SSID(服務集識別碼)**:SSID 是用來識別 Wi-Fi 網路的名稱。當我們在搜索可用網路時,會看到各種 SSID。
+2. **加密協議**:常見的 Wi-Fi 加密協議有 WEP、WPA 和 WPA2。其中目前 WPA3 是最安全的選擇,建議更新舊有使用 WPA2 或無法使用 WPA3 的 Wi-Fi 設備。
+3. **BSSID(基本服務集識別碼)**:每個無線接入點(AP、Wi-Fi 設備、電腦、手機)都有一個唯一的識別碼,由製造商分配,通常使用機器的 MAC 地址。
+4. **路由器**:路由器是把外部網路信號轉換成 Wi-Fi 信號的設備,允許多台設備同時上網。
+5. **熱點(Hotspot)**:熱點是一種無線網路接入點,可以由手機、路由器或其他設備提供,允許附近的設備連接並上網。
+
+## 使用網路與 Wi-Fi 應該注意到什麼?
+
+### 安全的連接
+
+- **使用強密碼保護 Wi-Fi 網路**:確保您的 Wi-Fi 網路使用強大且不易破解的密碼,並選擇 WPA2 或更高的加密協議。
+- **避免使用公共 Wi-Fi 處理機敏資訊**:公共 Wi-Fi 通常不安全,除非必須使用,請搭配 VPN 一起使用,以增加額外的保護層。
+- **定期更新路由器設備**:廠商經常會發佈更新來修復安全漏洞,定期更新確保設備保持最安全的狀態。
+
+### 識別不安全的網路
+
+- **無加密的 Wi-Fi**:如果網路連接時不需要任何密碼,那麼這個網路可能是不安全的,很容易被攻擊者攔截和竊取資料。
+- **不正常的網路活動**:例如網路速度突然變慢或無法訪問某些網站,可能暗示您的網路正被攔截或監控。
+- **冒充網路**:攻擊者可能會建立惡意的 Wi-Fi 熱點並使用與常見的公共熱點相似的名稱,誘導使用者連接。
+
+### 防範措施
+
+- **使用 VPN(虛擬私人網路)**:{==VPN 可以加密您的網路流量==},使其難以被監控和攔截,特別是在使用公共 Wi-Fi 時。
+- **啟用雙重身份驗證(2FA)**:許多線上服務提供雙重身份驗證,這可以大大提高帳戶的安全性,避免受盜。
+- **避免使用相同的密碼**:不同帳戶應該使用不同的密碼,以減少一個帳戶被入侵時,其他帳戶亦受到影響的風險。
+
+## 公民團體辦公位置網路建議
+
+!!! info "辦公室網路安全建議"
+
+ 公民團體經常處於資訊攻防的前線,網路和 Wi-Fi 安全對其運作至關重要。以下列出了一些關鍵點,以提升公民團體在使用網路和 Wi-Fi 時的安全性。
+
+ 1. **設置強密碼**:避免使用簡單、易猜的密碼。
+ 2. **啟用雙因素認證**:不僅依賴密碼,還應啟用雙因素認證(2FA),即使密碼洩露,駭客也難以輕易入侵。
+ 3. **禁止共用帳號**:每個團隊成員應該擁有自己的個人帳號和密碼,嚴禁共用帳號,以便在發生安全問題時容易追蹤。
+ 4. **Wi-Fi 安全性**:使用 WPA3 加密,如果設備無法升級,至少應使用 WPA2,但要避免使用無密碼或 WEP 這樣的舊加密方式。
+ 5. **隱藏 SSID**:預設情況下,Wi-Fi 的 SSID 是公開的,以隱藏 SSID 能夠增加一層保護,使攻擊者難以找到您的網路。
+ 6. **設置訪客網路**:對外來訪客啟用一個獨立的訪客網路,與主要網路分開,這樣可以防止訪客接觸到內部網路的機敏資料。訪客網路也應該設置強密碼。
+ 7. **啟用防火牆**:防火牆是保護網路免受未授權訪問的第一道防線。應該配置路由器內建的防火牆功能,並根據需要設置相應的規則來過濾流量。
+ 8. **網路分段**:將網路分成不同的虛擬區段(VLAN),以隔離不同的流量,如內部網路、訪客網路、文件服務器、NAS、影印機...等。這樣做可以限制攻擊的範圍和影響。
+ 9. **使用 VPN 遠端連線**:對於需要遠端訪問內部網路的成員,應強制使用虛擬私人網路(VPN),這樣可以加密通信,防止機敏資料在網路上被竊取。
diff --git a/docs/chapter/profile/index.md b/docs/chapter/profile/index.md
new file mode 100644
index 0000000..5ecd6f5
--- /dev/null
+++ b/docs/chapter/profile/index.md
@@ -0,0 +1,80 @@
+---
+icon: material/smart-card
+title: 身分驗證
+---
+
+# :material-smart-card: 身分驗證
+
+身分驗證是資訊安全中至關重要的一環,公民團體在提升資安抵禦能力時應特別關注以下幾個面向:
+
+## 密碼強度
+
+- 建議使用長且複雜的密碼,包含大小寫字母、數字和特殊符號。
+- 定期更換密碼,避免長期使用同一組密碼。
+- 不要使用容易被猜測的個人資訊作為密碼。
+
+!!! tip "參考章節"
+
+ 關於密碼強度的建議與設定,可以參考「[密碼強度](./password.md)」章節。
+
+## 雙重驗證(2FA)或多因子驗證(MFA)
+
+- 除了密碼外,增加一層驗證,例如{--手機簡訊--}、電子郵件驗證碼、驗證應用程式(如 Google Authenticator)、或生物特徵(如指紋或人臉識別)。
+- 強烈建議所有關鍵系統和帳戶都啟用 2FA 或 MFA。
+
+!!! tip "參考章節"
+
+ 關於 2FA/MFA 的建議與設定,可以參考「[多因子驗證](./mfa.md)」章節。
+
+## 生物特徵驗證
+
+- 使用指紋識別、人臉識別、聲紋識別等生物特徵技術來增強身分驗證的安全性。
+- 注意生物特徵資料的隱私保護和安全存儲。
+
+## 單一登入(SSO)
+
+- 將多個應用和服務統一在一個單一的登入介面上,減少多次登入的漏洞風險。例如透過 Google 或微軟 OAuth 帳號登入,不需要再而外建立新的帳號密碼登入其他應用服務。
+- 確保選用的 SSO 解決方案的安全性,例如強化其密碼保護和加強其管理策略。
+
+??? info "什麼是單一登入(Single Sign-On, SSO)"
+
+ 單一登入(Single Sign-On,縮寫 SSO)是一種身份認證機制,允許使用者在一次登入後即可訪問多個應用程式或系統,而不需每次都重新輸入帳號密碼。這種技術能夠大大簡化使用者體驗,同時也提升安全性和管理效率。
+
+ 1. **使用者便利性**:使用者只需記住一組帳號密碼即可訪問多個服務,減少了忘記密碼的情況,提升了使用者滿意度和工作效率。
+ 2. **提高安全性**:集中管理身份認證可以更容易實施強化的安全策略,例如多因素認證(MFA)或強密碼策略,減少了重複使用密碼的風險。
+ 3. **降低 IT 運營成本**:集中化的管理能減少 IT 部門在密碼重設和帳號管理上的工作量,進而降低支持成本。
+ 4. **減少釣魚攻擊**:使用者只需登入一次,減少了多次輸入帳號密碼的風險,從而減少了釣魚攻擊成功的可能性。
+
+## 登入活動監控
+
+- 實時監控登入活動,發現異常或可疑的登入行為及時處理。
+- 設置登入失敗次數限制,防止暴力破解攻擊。
+
+??? info "Google Wrokspace, Microsoft 365"
+
+ 在 Google Wrokspace, Microsoft 365 兩個平台的管理後台可以查看帳號登入情況,也可以設定相關的警報通知。
+
+
+## 教育與培訓
+
+- 定期對團體成員進行資訊安全教育,提升安全意識,減少人為失誤的風險。
+- 教育成員如何識別釣魚詐騙和社交工程攻擊。
+
+## 帳戶與權限管理
+
+以下為帳戶與權限管理基本原則,可以在處理帳號與權限問題時再次審視是否有涵蓋到原則中需要注意的項目。
+
+??? info "管理原則"
+
+ 1. **最小權限原則(Principle of Least Privilege)**:
+ 確保每位使用者或系統只擁有完成其職責所需的最低限度權限。這樣一來,即便帳戶遭到入侵,攻擊者能造成的損害也相對較小。
+ 2. **角色基礎存取控制(Role-Based Access Control, RBAC)**:
+ 根據使用者的職責和角色分配權限,而非個別分配。這有助於簡化權限的管理和審計。
+ 3. **定期審查和調整(Regular Reviews and Adjustments)**:
+ 定期審查使用者權限,確保過時或不再必要的權限及時被移除或調整。
+ 4. **即時撤銷權限(Real-Time Revocation)**:
+ 當使用者離職或角色改變時,應該即時撤銷或調整其權限,以防止未經授權的存取。
+ 5. **細粒度權限控制(Fine-Grained Access Control)**:
+ 根據具體情境設置更加精細的權限控制,比較常見的例子有 IP 地址、時間或地點的限制。
+
+這些手段相互配合,可以有效提升公民團體在面對身分認證相關威脅時的防禦能力。
diff --git a/docs/chapter/profile/mfa.md b/docs/chapter/profile/mfa.md
new file mode 100644
index 0000000..7d77c22
--- /dev/null
+++ b/docs/chapter/profile/mfa.md
@@ -0,0 +1,55 @@
+---
+title: 多因子驗證
+---
+
+# :material-card-account-details-star: 多因子驗證
+
+2FA(Two-Factor Authentication,雙因素驗證)和 MFA(Multi-Factor Authentication,多因素驗證)是資訊安全中的重要機制,用於加強對帳戶及數據的保護。這些機制透過要求多種驗證方法,而非僅依賴單一的密碼,來確保使用者的身份是真實和合法的。
+
+### 2FA 與 MFA 的基本概念
+
+#### 雙因素驗證(2FA)
+
+雙因素驗證是一種需要兩種不同類型的驗證方式來確認使用者身份的方法。這些驗證方式通常來自以下三類:
+
+1. **知識因素(你知道的資訊)**:使用者知道的資訊,如密碼或 PIN 碼。
+2. **擁有因素(你擁有的物品)**:使用者擁有的物品,如手機 OTP、智能卡或硬體 Token(YubiKey)。
+3. **生物辨識因素(你是誰)**:使用者本身的生物特徵,如指紋、臉部識別或聲音識別。
+4. **地理位置因素(你在哪裡)**:檢查使用者的登入IP位址,以檢測是否來自預期的地理位置,透過 GPS 或其他位置服務標籤確認使用者所在地。
+
+#### 多因素驗證(MFA)
+
+多因素驗證則擴展了雙因素驗證的概念,可能包含**兩種或多種以上的不同類型的驗證方式**。目的是提供更強的安全保護,涵蓋不同的使用情境和威脅模型。
+
+### 重要性
+
+1. **提升安全性**:
+ - 單一密碼的保護已非常脆弱。現今駭客手段多樣,像是釣魚攻擊、字典攻擊、暴力破解等,都能輕易獲取或猜測密碼。使用 2FA 或 MFA 後,攻擊者即使知道了密碼,仍需要額外的驗證因素,極大的提升攻擊的難度。
+
+2. **阻擋未授權存取**:
+ - 即使密碼被洩漏或竊取,由於攻擊者無法提供第二或第三種驗證因素,如一次性驗證碼或生物特徵,仍難以取得系統或帳戶的存取權。
+
+3. **保護機敏資料**:
+ - 許多公民團體處理著高度機敏的資料,例如成員名單、募款資訊等,這些資料一旦洩漏,可能造成巨大的危害。2FA 和 MFA 可為這些資料提供額外的防護。
+
+4. **符合合規要求**:
+ - 許多國家和地區的法律或行業規範現已將 2FA 或 MFA 列為必須遵循的安全措施。例如,歐盟的 GDPR 和美國的 HIPAA 等法規。
+
+### 如何實施 2FA / MFA
+
+1. **啟用標準 2FA**:
+ - 大多數線上服務如 Google、Facebook、Twitter 等,皆支持 2FA。通常這些服務會根據你的密碼要求你輸入從手機應用程序(如 Google Authenticator)生成的一次性密碼。
+
+2. **硬體 Token / PIV 卡**:
+ - 對於更高安全需求,使用硬體 Token(如 YubiKey)或 PIV 卡來實現 MFA 能提供物理層面的保護。
+
+ ??? question "什麼是 PIV"
+
+ **Personal Identity Verification (PIV)** 是一種專為提供安全個人身份驗證而設計的系統,通常用於政府和高安全性要求的環境中。PIV 系統結合了各種技術和標準,以確保使用者的身份有效驗證,主要目的是:身份確認、安全存取、資料保護。PIV 卡主要包含以下元素:照片、指紋、數位憑證、區域訪問控制。
+
+ 對於公民團體,雖然可能不直接使用 PIV 技術,但可以從其概念中獲得啟示,如採用多因素驗證和加強身份驗證的措施來保護群體成員和機敏資料。
+
+3. **生物辨識技術**:
+ - 當前許多設備如智能手機和筆記型電腦,已內建指紋掃描、臉部識別等生物辨識技術,可被用於實現更為方便且安全的 MFA。
+
+2FA / MFA 是增強資訊安全不可忽視的重要工具,它們通過增加多層次的辨識來保護帳戶和數據免受未授權存取,是現今數位生活和工作的基礎防護措施。公民團體尤其需要針對自身所處的風險環境,評估並實施適當的 2FA / MFA,以確保資訊的安全性和完整性。
diff --git a/docs/chapter/profile/password.md b/docs/chapter/profile/password.md
new file mode 100644
index 0000000..69260f9
--- /dev/null
+++ b/docs/chapter/profile/password.md
@@ -0,0 +1,60 @@
+---
+title: 密碼強度
+---
+
+# :material-shield-key: 密碼強度
+
+在資訊安全中,密碼強度是指密碼抗破解能力的高低。強密碼能有效防止未經授權的使用者進入系統,降低保護資料被盜取或篡改的風險。這一章節將介紹**密碼(password)**和**密碼短語(密碼片語、助記詞,passphrase)**的重要性及如何選擇強密碼。
+
+## 密碼 Password
+
+### 密碼的長度與複雜度
+
+- **長度**:一般建議密碼應至少有 12 個字符。長度越長,越難以通過暴力破解攻擊(brute force attack)破解。
+- **字符組合**:應包含大小寫字母、數字及特殊符號(如`!@#$`等)。例如:`H6!pS3@z09`。
+
+### 避免常見模式
+
+- 不要使用常見詞彙或模式,如 `123456`、`password`、`qwerty`。
+- 避免使用個人相關資訊,如姓名、生日、電話號碼等。
+
+!!! note "經常更新密碼"
+
+ - 最好定期更換密碼,如每三到六個月。
+ - 確保不同帳戶使用不同的密碼,這樣即使一個帳號被破解,其他帳號仍然安全。
+ - 請搭配「[密碼管理器](./password_manager.md)」來達成此建議。
+
+## 密碼短語 Passphrase
+
+密碼短語是一組隨機的單詞組合,相較於傳統密碼更長且更容易記憶。例如:`Sunlight!Dances@Midnight`、`Rewrite8-Neuter-Showoff-Backboned-Surviving`。
+
+### 密碼短語的優點
+
+- **長度**:密碼短語通常會比一般密碼更長,使破解時間成倍增加。
+- **記憶容易**:對於人腦而言,記住一串相關或有意義的詞語比記住一長串隨機字符容易。
+
+### 選擇強密碼短語
+
+- 包含多個無關的單詞,避免常見語法或詞組。
+- 可以結合特殊符號或數字,如:`Cats&Mountains4Ever!`。
+
+!!! tip "養成良好習慣"
+
+ - 使用密碼管理器,工具能幫助記住複雜且唯一的密碼,並能自動完成填寫密碼。
+ - 使用 2FA / MFA 認證機制,提高安全性。
+ - 避免在公共場所輸入密碼,如咖啡店、圖書館。
+ - 不在不同網站重複使用同一組密碼。
+
+!!! note "密碼策略:密碼與密碼短語差異"
+
+ ![https://xkcd.com/936/](https://imgs.xkcd.com/comics/password_strength_2x.png){ loading=lazy }
+
+ - 密碼:亂數密碼對於電腦運算來說非常容易,但是對於人類很難記憶。
+ - 密碼短語:反而對於電腦運算非常困難,一段句子短語對人來來說很好記憶。
+ - 圖片來源:[xkcd: Password Strength - https://xkcd.com/936/](https://xkcd.com/936/)
+
+!!! info "2024 年破解密碼的時間"
+
+ ![Are Your Passwords in the Green?](https://images.squarespace-cdn.com/content/v1/5ffe234606e5ec7bfc57a7a3/c8c21f1a-ac0a-4dd5-97bf-51a2e4fa63e4/Hive+Systems+Password+Table+-+2024+Square.png){ loading=lazy }
+
+ - 參考資料:[Are Your Passwords in the Green? - Hive Systems](https://www.hivesystems.com/blog/are-your-passwords-in-the-green)
diff --git a/docs/chapter/profile/password_manager.md b/docs/chapter/profile/password_manager.md
new file mode 100644
index 0000000..fccb50a
--- /dev/null
+++ b/docs/chapter/profile/password_manager.md
@@ -0,0 +1,94 @@
+---
+title: 密碼管理器
+---
+
+# :material-safe-square-outline: 密碼管理器
+
+密碼管理器是一種數位工具,專門設計用來儲存和管理用戶各種線上帳號的密碼。它通常會以一個強而唯一的「{==主密碼==}」來保護所有儲存在其中的密碼,讓使用者無需記住所有的密碼,只需記住這一個主密碼即可。這些工具可以自動生成強而不易破解的密碼,並在用戶登入各種網站和應用程式時自動填入相關資料。
+
+密碼管理器的重要性主要體現在以下幾個方面:
+
+1. **強化密碼安全**: 密碼管理器能夠生成並存儲複雜、長度足夠且獨特的密碼,使得駭客更難以通過暴力破解或字典攻擊來取得用戶帳號。這些強密碼比用戶自行創建的簡單密碼安全得多。
+2. **防止重複使用密碼**: 研究顯示,許多人會在多個網站使用相同的密碼。密碼管理器鼓勵唯一性的密碼配置,防止一處洩漏導致多個帳戶遭破解。
+3. **保護機敏資訊**: 除了密碼,這些工具還能儲存信用卡資訊、身份證件、私人筆記等,統一管理並高度加密保管。
+4. **自動填寫**: 儲存的密碼和資訊能自動填寫登入和註冊表單,提升使用者的方便性,省去手動輸入的麻煩。
+5. **提升效率**: 使用密碼管理器可以節省查找和重設忘記密碼的時間,進一步提升工作效能。
+6. **降低釣魚攻擊風險**: 密碼管理器通常只在{==合法網站自動填寫登入憑證==},有助於防止釣魚網站獲取使用者的密碼。
+7. **集中管理**: 所有密碼儲存在一個安全的平台上,便於使用者了解和管理各個帳戶的安全性。
+8. **合規與稽核支持**: 尤其對企業來說,密碼管理器可以提供使用記錄,符合某些安全合規要求。
+9. **定期更新提示**: 一些密碼管理器會提醒用戶定期更新密碼,保持帳戶安全。
+10. **多重驗證的強化**: 許多密碼管理器支援多重認證(MFA),增加額外的安全層級,防止未授權存取。
+
+## 如何挑選密碼管理器
+
+挑選密碼管理器時,有幾個關鍵因素需要考量,以確保資料的安全性及使用的方便性。以下是挑選密碼管理器應考量的重要項目:
+
+1. **安全性**:密碼管理器應具備強大的加密技術,例如 AES-256 加密,以保護存儲的密碼。
+2. **多平台支持**:確保密碼管理器在你常用的操作系統和設備上都能使用,例如 Windows、macOS、Linux、iOS 及 Android。
+3. **易用性**:使用介面應簡單直觀,便於用戶管理和存取密碼。
+4. **自動填充功能**:應具備自動填寫密碼和表格的功能,提高效率並減少手動輸入錯誤。
+5. **密碼生成器**:提供強密碼生成功能,幫助用戶創建複雜、安全的密碼。
+6. **多因素認證(MFA)**:支援多因素認證,增加一層安全保護。
+7. **同步功能**:允許跨設備同步密碼,以便隨時隨地訪問你的帳戶。
+8. **備份和恢復**:提供備份和恢復功能,以應對資料丟失的情況。
+9. **隱私政策**:檢查密碼管理器的隱私政策,確保你的資料不會被分享或用於其他用途。
+10. **開源性**:優先選擇開源軟體的密碼管理器,因為其程式碼公開,讓**社群**或**稽核安全認證單位**可以檢視並且更容易發現及修正安全漏洞。
+
+## 推薦的密碼管理器
+
+### :material-cloud-sync: 雲端服務
+
+雲端服務的密碼管理器則是在網路上運作,允許你在不同裝置間同步和存取你的密碼。以下是幾個常見且評價良好的雲端密碼管理器:
+
+#### Bitwarden
+
+是一款免費且開源的密碼和通行密鑰管理工具。它旨在為個人、團隊和企業組織解決密碼管理問題。Bitwarden 是目前存儲所有登入資訊和密碼的最佳和最安全解決方案之一,且能方便地在所有設備間同步。
+
+[前往 Bitwarden 首頁](https://bitwarden.com/){ .md-button }
+
+#### Proton Pass
+
+是由 Proton 團隊(Proton Mail 的開發者)所開發的開源端到端加密的密碼管理工具。它能安全地存儲您的登入憑證、生成獨特的電郵別名、支持和存儲通行密鑰,並提供由社區資助、在瑞士設立且受到嚴格數據隱私法保護的服務。
+
+[前往 Proton Pass 首頁](https://proton.me/pass){ .md-button }
+
+#### Psono
+
+是一款來自德國的免費開源密碼管理工具,專注於團隊的密碼管理。Psono 支持安全共享密碼、文件、書籤和電子郵件。所有機密資訊均由主密碼保護。
+
+[前往 Psono 首頁](https://psono.com/){ .md-button }
+
+### :material-harddisk: 本地儲存
+
+#### KeePassXC
+
+KeePassXC 是 [KeePassX](https://www.keepassx.org/) 的社群分支,而 KeePassX 是 KeePass Password Safe 的原生跨平台移植版本。KeePassXC 的目標是透過新增功能和修復漏洞來擴展和改進這個密碼管理工具,為使用者提供一個功能豐富、跨平台且現代化的開源密碼管理器。
+
+[前往 KeePassXC 首頁](https://keepassxc.org/){ .md-button }
+
+!!! info "「:material-cloud-sync: 雲端服務」與 「:material-harddisk: 本地儲存」的差異"
+
+ 密碼管理器主要分為「:material-cloud-sync: 雲端服務」和「:material-harddisk: 本地儲存」兩種類型,各自有其優點和缺點。
+
+ **雲端服務密碼管理器**將使用者的密碼儲存在雲端伺服器上,使用者可以透過網際網路在多個設備上同步和存取這些密碼。這類服務通常提供以下優點:
+
+ - **跨設備同步**:無論是在電腦、手機還是平板電腦上,使用者都能夠方便地存取和使用其密碼。
+ - **自動備份**:雲端服務通常會定期自動備份資料,防止因設備遺失或故障導致密碼丟失。
+ - **即時更新**:密碼更新會及時同步到所有設備,保持一致性和便利性。
+
+ 然而,雲端服務也存在一定的風險和缺點:
+
+ - **伺服器駭客風險**:儘管雲端服務提供高級加密和安全措施,但若伺服器遭受駭客攻擊,用戶資料可能會面臨被盜取的風險。
+ - **網路依賴性**:使用者必須具備網路連線才能存取其密碼或更新過的資訊,部分功能可能無法離線使用。
+
+ **本地儲存的密碼管理器**將所有的密碼和機密信息儲存在使用者自己的設備上,不依賴外部伺服器。這類密碼管理器有以下優點:
+
+ - **控制權高**:使用者完全控制密碼資料,無須擔心伺服器被駭或服務提供商洩漏資料。
+ - **無需網路連線**:即使在沒有網路連線的情況下,使用者也能存取和使用其密碼。
+
+ 然而,本地儲存亦有一些缺點和挑戰:
+
+ - **設備故障風險**:若設備遺失、損壞或遭受攻擊,密碼資料可能無法恢復,除非有定期本地備份。
+ - **同步困難**:在多個設備間同步密碼資料需要手動操作,可能不如雲端服務便利。
+
+ 選擇何種密碼管理器應根據**使用者的需求、風險承受能力、使用情境(個人或組織使用)**來決定。如果需要高便利性和跨設備同步,雲端服務是較好的選擇;而若更加注重資料控制和安全性,本地儲存可能更為適合。
diff --git a/docs/chapter/threat_modeling_class.md b/docs/chapter/threat_modeling_class.md
new file mode 100644
index 0000000..2465d0a
--- /dev/null
+++ b/docs/chapter/threat_modeling_class.md
@@ -0,0 +1,97 @@
+---
+icon: material/order-bool-descending-variant
+title: 威脅建模
+---
+# :material-order-bool-descending-variant: 威脅建模
+
+!!! inline end info "課程教材"
+
+ - :open_file_folder: [課程簡報(CSCS, v.3 _ 1. 開場 - 風險在哪_ (威脅建模)_, Google Slides)](https://docs.google.com/presentation/d/1GrlsB6EycQr3RspUhhfBHPwJXT5Hnmhr/)
+
+威脅建模是一種資訊安全方法,旨在評估和理解系統或應用程式所面臨的潛在威脅和風險。透過威脅建模,我們可以分析系統的設計、功能和資源,以識別可能的攻擊向量和弱點。這個過程有助於組織建立有效的防禦策略,減少可能的攻擊和風險。威脅建模通常包括收集資訊、進行威脅分析、評估風險並提出改善建議的步驟。透過威脅建模,組織可以更好地保護其資訊資產,提高安全性和應變能力。
+
+## 如何開始
+
+在威脅建模中,有幾種常見的方法:
+
+1. 資訊收集:首先,需要收集與系統相關的各種資訊,包括系統結構、功能、資源和機敏資料等。
+2. 威脅分析:在這個階段,專注於識別可能的威脅,包括外部攻擊者、內部威脅者和自然災害等。這可以通過威脅建模工具、漏洞分析和攻擊樹模型等方法進行。
+3. 風險評估:對已識別的威脅進行風險評估,評估其可能性和影響程度。這有助於確定哪些威脅需要優先考慮以及需要採取的防禦措施。
+4. 改善建議:基於威脅分析和風險評估的結果,提出改善建議,包括加強系統設計、實施安全控制和加強監控等。
+
+透過這些方法,組織可以更全面地了解其資訊安全風險並制定相應的對策,從而提高系統的安全性和抵禦能力。
+
+## 威脅與風險有什麼不同?
+
+在資訊安全領域中,「{++威脅++}」和「==風險==」是兩個核心概念,但它們之間存在著明顯的區別。
+
+首先,讓我們來看一下「{++威脅++}」的定義。威脅是指可能對系統或資訊安全造成損害或危害的任何潛在事件、行動或情況。這些威脅可以包括來自外部攻擊者的惡意行為,例如駭客入侵、惡意軟體攻擊,也可以包括自然災害、技術故障、人為錯誤等因素。簡而言之,威脅是可能導致安全問題或損害的各種潛在因素。
+
+另一方面,「==風險==」則是與威脅相關的概念,但更強調的是對安全資產的損害或損失的可能性和影響。風險是對威脅發生的可能性和潛在損害的評估。換句話說,風險是威脅造成的潛在影響的量化評估,並考慮到該影響的發生機率。
+
+簡單來說,{++威脅++}指的是可能對系統造成損害的潛在因素,而風險則是評估這些潛在威脅造成的實際損害的可能性和影響程度。換句話說,威脅是事件的起因,而風險則是對該事件可能帶來的後果的評估。
+
+在資訊安全管理中,了解和評估{++威脅++}和{==風險==}對於制定有效的安全策略和措施至關重要。通過識別潛在的威脅,組織可以更好地了解其面臨的安全挑戰,並採取相應的防禦措施來降低風險。同時,通過對風險進行評估,組織可以優先考慮和管理最具威脅性的風險,以確保資訊系統和資產的安全性。
+
+總之,{++威脅++}和{==風險==}在資訊安全管理中扮演著不可或缺的角色,對於確保組織的資訊安全至關重要。通過了解並有效地應對威脅和風險,組織可以提高其安全性和抵禦能力,保護其重要的資訊資產免受損害。
+
+## 建立您的威脅模型
+
+威脅建模可幫助您識別對您重要的事物的威脅,以及需要保護它們的對象。在建立威脅模型時,您可以問自己以下問題。
+
+1. 我要保護什麼?資料?人?
+2. 我想保護它免於誰的攻擊?動機是甚麼?有甚麼能耐?
+3. 如果失敗了,後果是甚麼?這後果是可承受的嗎?
+4. 這發生的機率有多大?我有多大的必要主動保護資產?
+5. 我願意承擔多少「麻煩」來預防潛在後果呢?
+
+### 我想要保護什麼?
+
+在資訊安全的範疇中,「資產」通常是只你重視且希望受到保護東西,它可以是一個物品、設備或是無形的概念。
+
+在公民團體的範疇中,通常需要保護的資訊可能有:電子郵件、通訊錄、位置地點、會議記錄、活動策略、成員資訊...等,這些項目尤為重要,當公民團體遭受到外部監控或威脅。
+
+### 我想保護它免於誰的攻擊?
+
+為了回答這個問題,首先需要識別可能對您或您的資訊構成威脅的人或組織。一個對您的資產構成威脅的人或被稱為「對手」。潛在的對手可以是您的老闆、前同事、您的前伴侶、商業競爭對手、您的政府,或者是網路上的駭客。
+
+列出所有可能想要獲得您資產的對手。您的列表可能包括個人、政府機構、企業或公民團體等。根據您的對手是誰,這份列表可能在您完成威脅模型後、需要被銷毀。這是為了保護您自身及相關訊息不受到未來潛在威脅。
+
+### 如果失敗了,後果是甚麼?
+
+「對手」獲取您的資產的方式有很多種。例如:對手可能在資料傳輸過程中閱讀您的保密通訊,或者直接刪除或破壞資料。而他們的動機及策略各不相同。例如:政府為了防止警察暴力事件的影像傳播,可能刪除或降低該影片的可見程度。相對的,對手可能希望獲取秘密資訊,並在你不知情的情況下公開。
+
+在風險評估的時候要了解如果「對手」成功獲取您的某項資產,後果可能會有多嚴重。相對的,您也應該考慮「對手」的能力,例如:手機供應商能接觸到您所有的通話紀錄。在開放的 Wi-Fi 網路連線時,駭客能夠存取您未加密的通訊。
+
+思考一下,「對手」可以想要你的「資產」做些什麼?
+
+### 這發生的機率有多大?
+
+{==風險==}是指特定{++威脅++}對特定資產實際發生的可能性。風險與能力是相輔相成的,雖然你的手機電信服務商有能力存取你所有的通訊資料,但他們將你相關的個人資料公開在線上以傷害你的聲譽的風險、相對來說是很低的。
+
+區分可能發生的事與其發生的概率是非常重要的。例如,你的建築物可能會倒塌,但這種情況發生的風險在臺灣(地震頻繁)遠大於斯德哥爾摩(地震罕見)。
+
+評估風險是一個{==主觀的過程==}。許多人認為無論某些威脅發生的可能性有多小,只要威脅存在,就不值得冒這個風險。在其他情況下,可能因此忽視{++高風險++},因為他們不認為那些威脅是問題。
+
+記下將認真對待的威脅,以及那些可能過於罕見或無害(或太難以對抗)而不值得擔心的威脅。
+
+### 我願意承擔多少「麻煩」來預防潛在後果呢?
+
+在資安領域中,沒有完美的選擇。每個人的優先順序、關注點或資源上的使用都不相同。您的風險評估將使您能夠規劃適合自己的策略,平衡便利性、成本和隱私保護。
+
+例如,代表客戶處理國家安全案件的律師可能願意採取更嚴格的措施來保護相關通訊,例如使用加密電子郵件,這與平常只是發送有趣貓咪影片給女兒的母親相比,所需的安全措施自然不同。
+
+在記下您能使用的選項來幫助您降低面臨獨特威脅時,注意是否有任何財務限制、技術限制或是社會限制。
+
+## 風險評估表
+
+!!! info ""
+
+ 如何使用與執行「風險評估表」,請參考此章節。
+
+ [:material-arrow-right-bold: 操作手冊:風險評估表](../user_guide/risk_assessment.md){ .md-button .md-button--primary }
+
+## 參考資料
+
+- [EFF Surveillance Self Defense: Your Security Plan](https://ssd.eff.org/en/module/your-security-plan)
+- [Threat Modeling: The First Step on Your Privacy Journey - Privacy Guides](https://www.privacyguides.org/en/basics/threat-modeling/)
diff --git a/docs/course/index.md b/docs/course/index.md
new file mode 100644
index 0000000..47ebd5c
--- /dev/null
+++ b/docs/course/index.md
@@ -0,0 +1,41 @@
+---
+icon: octicons/file-directory-open-fill-16
+title: 教材資源
+---
+
+# :octicons-file-directory-open-fill-16: 教材資源
+
+???+ abstract "學習歷程:「章節內容」、「操作說明」"
+
+
+
+ 此頁面將針對「[章節內容]」、「[操作手冊]」的使用說明。(完整流程:「[章節內容]」、「[操作手冊]」、「[政策制定]」、「[狀態評估]」、「[關懷與諮詢]」)
+
+ [章節內容]: ../chapter/index.md
+ [操作手冊]: ../user_guide/index.md
+ [政策制定]: ../policy/index.md
+ [狀態評估]: ../assessment/index.md
+ [關懷與諮詢]: ../support/index.md
+
+## 章節內容說明
+
+
+
+「章節內容」的制定涵蓋組織分險評估、個人設備裝置安全、身份驗證、網路使用行為、加密通訊、帳號管理、資料管理與備份、海外出差。以上主題部份將拆分更細的子課程來完整主題課程內涵。
+
+其中「威脅建模」會是所有參與組織的起始課程,服務導入團隊將帶領各位一起謹慎省思組織內、外所面臨的風險與威脅,並產出一到數份不同面向的「風險評估表」。
+
+## 操作手冊說明
+
+
+
+各章節的「主題課程」後,再透過搭配相對應課程的「操作手冊」調整裝置、作業系統、網路設定服務來修正與增強資安抵禦能力。
diff --git a/docs/howtouse/a_team.md b/docs/howtouse/a_team.md
new file mode 100644
index 0000000..c920f7c
--- /dev/null
+++ b/docs/howtouse/a_team.md
@@ -0,0 +1,28 @@
+---
+icon: material/book-heart
+title: 關懷組
+---
+
+# :material-book-heart: 關懷組
+
+## 服務範圍
+
+
+
+1. 線上教材資源都可直接使用。
+2. 依**政策範本**與現有的政策合併或補充完備。
+3. 除了線上教材資源外,服務導入團隊也會針對政策制定、組織成員資安防護做定期的關懷與推進。
+
+!!! note "線上教材如何使用?"
+
+ - 線上教材如何使用可以參考[如何使用](./index.md)說明。
+
+## 角色建立
+
+組織內需要協助指派以下角色,在專案啟動時。
+
+1. 聯絡窗口:負責與服務導入團隊聯繫、傳遞資訊給予組織內部、安排課程時間…等事宜。
+2. 政策制定負責人:負責政策制定、調整與落實的夥伴,可為管理者授權指派。
diff --git a/docs/howtouse/index.md b/docs/howtouse/index.md
new file mode 100644
index 0000000..449f9b1
--- /dev/null
+++ b/docs/howtouse/index.md
@@ -0,0 +1,103 @@
+---
+icon: octicons/unverified-16
+title: 如何使用
+---
+
+# :octicons-unverified-16: 如何使用
+
+!!! info "專案計畫執行"
+
+ 本專案計畫執行時,將分為「關懷組」與「自學組」,可使用的線上教材資源相同,唯一差異在服務導入團隊協助的方式。詳細的任務與說明可以再分別查閱「[關懷組](./a_team.md)」、「[自學組](./self.md)」項目說明。
+
+本線上教材如何使用,可以參考以下流程圖解釋。
+
+
+
+## 流程說明
+
+### 角色定義
+
+- **組織所有成員**:組織內所有成員。可為以下角色:
+ - 全職、約聘、兼職的夥伴。
+ - 志工團隊。
+- **組織政策制定組**:協助在組織內訂定與落實資安政策。可為以下角色:
+ - 組織管理者。
+ - 管理者授權的夥伴。
+- **聯絡窗口**:負責與服務導入團隊聯繫、安排組織培訓時間、後續進度追蹤…等事宜。
+
+此教材定義以上角色在不同階段需要協助與執行的任務。
+
+!!! note "參與專案計畫"
+
+ 參與專案的夥伴須指定一個**專案負責人**,協助服務導入團隊與組織間的聯繫與協調工作事宜。
+
+### 階段流程說明
+
+#### 1. CSCS 教材
+
+- 目的:提供組織夥伴基礎的資訊安全認知和技能框架。
+- 目標:確保組織指定的成員具備基本資安知識、CSCS 課程教材的使用。
+
+[CSCS](https://cscs.asia/) 團隊將為九大核心開設通識課程,透過課程建立基礎的資安觀念,請指派 2 位成員參與課程。
+
+!!! info "Civil Society Cyber Shield(CSCS)公民團體資安暨隱私交流計劃"
+
+ 台灣擁有在國際間相當知名的開源社群,亦有著極為活躍但面臨風險的公民社會。為了促進這兩個社群之間的交流,2017 年,開放文化基金會國際交流組與華人民主書院、台灣駭客協會、台灣人權促進會共四個組織共同開啟 CSCS 專案:Civil Society Cyber Shield,讓社會運動與組織者能夠接觸最新的資安工具、對抗資安威脅,在安全的線上環境中推動社會議題。[了解更多 →](https://cscs.asia/)
+
+#### 2. 風險評估、威脅建模
+
+- 目的:識別和評估組織面臨的資安風險與潛在威脅,為政策制定提供依據。
+- 目標:產出風險評估的詳細報告,幫助組織了解當前安全狀況,作為後續政策制定時的基礎。
+
+進行組織內的風險評估活動,將風險、威脅與行動做一次通盤的釐清。活動中討論出的情境與案例將以組織實際狀況為主,活動後將納入資安抵禦作為與政策制定時的參考素材。
+
+#### 3. 線上教材
+
+- 目的:為組織所有成員提供線上的學習資源,幫助他們隨時隨地學習資安知識。
+- 目標:提供以 CSCS 課程框架基礎和其他來源的綜合教學材料、確保成員可以自學並完成相關課程內容。
+
+在參與或未參與「**1. CSCS 教材**」課程的夥伴,可透過線上教材網站來學習基本的資安抵禦技能。線上教材是組織所有人開始學習的起點,「**[:octicons-book-16: 章節內容](../chapter/index.md)**」學習九大領域主題,涵蓋個人或是組織的情境。在每一主題或是單元後將提供相對應的「**[:octicons-gear-16: 操作手冊](../user_guide/index.md)**」,提供裝置或是應用程式的調整與使用教學。
+
+!!! info "「操作手冊」目的與目標"
+
+ - 目的:提供具體的操作指南,幫助組織夥伴將所學知識應用於日常工作中。
+ - 目標:確保成員能夠參照手冊,正確地執行資安相關操作和流程。
+
+#### 4. 資安政策制定
+
+- 目的:根據風險評估結果及參考資料,透過政策範本使政策制定更有條理和一致性,幫助政策制定組更有效率地建立適合組織的資安政策。
+- 目標:制定一套符合組織特定需求的資安政策、使用政策範本進行標準化和規範化。
+
+為了讓組織有基本的資訊安全抵禦能力,訂定政策為組織有個明確的依循規範。此階段將參考「**2. 風險評估、威脅建模**」活動中的素材與範本協助訂定相對應的政策。
+
+!!! note "盤點既有的政策"
+
+ 此階段也將再次彙整既有的政策與規範,避免重複制定或實行目標互相矛盾的項目。
+
+#### 5. 資安政策落實
+
+- 目的:將制定的資安政策實施到組織的日常運作中。
+- 目標:執行並落實已制定的資安政策,確保組織夥伴遵循政策要求,並按照操作手冊執行具體操作。
+
+將政策實際落實在組織內實行,並觀察政策實行的效果與調整。
+
+#### 6. 狀態評估
+
+- 目的:評估資安政策制定和實施的效果,以及學習成果。
+- 目標:使用評估表檢測政策執行狀況和學習成效,收集組織夥伴的意見,為邁向下一階段調整與改善。
+
+「**[:octicons-graph-16: 狀態評估](../assessment/index.md)**」提供各項單元的檢核表,自行評量目前組織內成員在那一個階段,是否需要尋求協助、是否能繼續進行下一階段的任務指派。
+
+!!! note "狀態評估檢核表"
+
+ 檢核表可協助組織專案負責人評估狀態,在**自行學習**的組織也可透過此方式自評。
+
+#### 7. 關懷與諮詢
+
+- 目的:根據狀態評估結果,提供必要的支援和改善建議。
+- 目標:通過諮詢,解決困難和問題。提供關懷,確保組織夥伴能有效地落實政策並達成資安目標。
+
+定期與服務導入團隊諮詢,了解各項資訊安全目標項目落實狀況,是否需要更多資源或是導入方式調整。
diff --git a/docs/howtouse/self.md b/docs/howtouse/self.md
new file mode 100644
index 0000000..4cedd30
--- /dev/null
+++ b/docs/howtouse/self.md
@@ -0,0 +1,28 @@
+---
+icon: material/book-account
+title: 自學組
+---
+
+# :material-book-account: 自學組
+
+## 服務範圍
+
+
+
+1. 線上教材資源都可直接使用,依教材指示完成各章節課程與操作調整。
+2. **政策範本**可參照後調整符合組織或團隊使用。
+3. 服務導入團隊定期追蹤、紀錄進度與諮詢。
+
+!!! note "線上教材如何使用?"
+
+ - 線上教材如何使用可以參考[如何使用](./index.md)說明。
+
+## 角色建立
+
+組織內需要協助指派以下角色,在專案啟動時。
+
+1. 聯絡窗口:負責與服務導入團隊聯繫、傳遞資訊給予組織內部、安排課程時間…等事宜。
+ - **政策制定與落實**的部份可依照**政策範本**調整,在定期諮詢時間可一同協助檢視。
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..ae2c586
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,70 @@
+---
+icon: octicons/home-16
+title: 資安防護基礎教材
+---
+
+# :material-security: 資安防護基礎教材
+
+本教材協助您與您的組織在資訊安全的增進,課程收錄九大部分,各部分依序提供基本的教材、課程章節中提及的安全參作手冊、組織內政策制定範本、組織狀態評估。
+
+陪伴教材各章節以可自主學習、由淺入深、手把手的原則方式進行編寫,如有課程上的疑問,也可透過關懷時間詢問與解答。
+
+
+
+- :octicons-unverified-16: __[如何使用線上教材]__
+
+ 專案目的與目標說明,各單元使用說明。
+
+
+
+
+
+- :material-book-heart: __[關懷組]__
+
+ 由專案導入團隊協助手把手的方式推動組織資訊安全的提昇。
+
+- :material-book-account: __[自學組]__
+
+ 透過線上網站提供的教材、檢查清單自學完成資安知識提昇。
+
+
+
+## 資訊安全教材
+
+
+
+
+
+- :octicons-book-16: __[章節內容]__
+
+ 資訊安全基本教材。
+
+- :octicons-gear-16: __[操作手冊]__
+
+ 工具、軟體、裝置安全設定操作指引。
+
+- :octicons-log-16: __[政策制定]__
+
+ 政策範本、制定與落實。
+
+- :octicons-graph-16: __[狀態評估]__
+
+ 個人或組織內資安意識、抵禦能力評估。
+
+- :octicons-heart-16: __[關懷與諮詢]__
+
+ 定期關懷、諮詢、常見問題、意見回饋。
+
+
+
+ [如何使用線上教材]: howtouse/index.md
+ [章節內容]: chapter/index.md
+ [操作手冊]: user_guide/index.md
+ [政策制定]: policy/index.md
+ [關懷與諮詢]: support/index.md
+ [狀態評估]: assessment/index.md
+ [關懷組]: howtouse/a_team.md
+ [自學組]: howtouse/self.md
diff --git a/docs/policy/abroad.md b/docs/policy/abroad.md
new file mode 100644
index 0000000..73898b4
--- /dev/null
+++ b/docs/policy/abroad.md
@@ -0,0 +1,50 @@
+---
+icon: material/airplane
+title: 海外出差
+---
+
+# :material-airplane: 海外出差
+
+海外出差涵蓋的因素與面向較多,政策制定以流程導向的方式確認每一步驟都有涵蓋到。
+
+## 必要項目
+
+1. 完成一份風險評估
+ - 詳細風險評估報告:進行全面的風險評估,包括政治、安全、健康、資訊和財務等多方面的風險。明確列出每項風險的發生可能性和影響程度,並建立風險評估
+ - 風險應對策略:針對每個識別出的風險,制定相應的應對策略,包括預防措施和應急計劃。
+
+2. 撰寫行程規劃書
+ - 住宿資訊:包含入住飯店、酒店、民宿…等詳細地址和聯絡方式。
+ - 行程路線:詳細路線和每日活動計劃。
+ - 聯絡人資訊:當地可信賴的聯絡人、國內聯繫人以及大使館或領事館的聯絡方式。
+ - 回報機制:定時回報的頻率和方式(例如每天一次的安全報告)。
+ - 應變計畫:應對突發事件的詳細步驟和撤離路線。
+
+3. 完成裝置安全檢查
+ - 全新乾淨的設備:確保攜帶的電腦、手機等設備為全新或已重置至出廠設定,並進行必要的安全設定。
+ - 軟體安裝和更新:所有設備上的軟體和操作系統都已更新至最新版本,安裝必要的安全防護軟體(如:防毒軟體、VPN)。
+ - 加密資料:對重要資料進行加密,並將加密的密鑰存儲於安全的離線密碼庫中。
+
+4. 行程中的安全規範準備
+ - 回報機制:建立聯絡和定期回報機制,確保所有成員定期報告行程和安全狀況。
+ - 行為指南:制定行為準則,要求成員在外保持低調,避免參與尚未完整評估其風險的當地政治活動和示威。
+ - 應急聯絡卡:每位成員隨身攜帶包含緊急聯絡人、當地醫療機構、大使館、領事館的聯絡資訊卡片。
+
+5. 返回後的設備檢查流程
+ - 掃描和檢查:使用專業的防病毒和防間諜軟體對所有設備進行全面的掃描和檢查。
+ - 設備重置和重新配置:如有必要,將設備重置至出廠設定,並重新配置安全設定。
+
+## 可參考項目
+
+1. 人身保險投保項目與金額
+ - 投保項目:包含人身意外保險、醫療保險、緊急撤離保險等。
+ - 保險金額:建議保險金額不低於 100 萬元,以確保在突發事件中能夠獲得充分的保障。
+ - 保險公司選擇:選擇信譽良好的保險公司,並確保其在目的地國家有合作醫療機構和支援服務。
+
+2. 返回後的安全檢討與修正會議
+ - 安全檢討會議:召開回國後的安全檢討會議,讓所有出差成員分享經驗和教訓,分析遇到的風險和問題。
+ - 政策修正:根據檢討會議的結果,更新和修訂「海外出差」政策和應對措施,持續改進。
+
+3. 機敏資訊、文件歸檔
+ - 資料文件歸檔和保護:將所有機敏資訊和文件進行歸檔,存儲於安全的資料庫中,並確保這些資料已加密。
+ - 存取控制:限制機敏文件的存取權限,僅允許相關人員查看和處理,並記錄存取日誌。
diff --git a/docs/policy/account_management.md b/docs/policy/account_management.md
new file mode 100644
index 0000000..23341e3
--- /dev/null
+++ b/docs/policy/account_management.md
@@ -0,0 +1,111 @@
+---
+icon: material/account-box
+title: 帳號管理
+---
+
+# :material-account-box: 帳號管理
+
+資訊安全政策範本分為基礎版與進階版,各版本分別再分為四個等級類型,請衡量組織的狀況作適當的調整。
+
+!!! tip ""
+
+ 「帳號管理」包含章節內容中的「[帳號權限管理與追蹤](../chapter/account/management.md)」。
+
+## 等級說明
+
+| 等級 | 說明 |
+| :---: | ------------------------ |
+| 優先 | 需優先且必須達成的項目。 |
+| 建議 | 完成或達成該項目會更好。 |
+| 須知 | 需先瞭解相關的背景知識。 |
+| 選用 | 額外的建議或其他的選項。 |
+
+## 基礎版本
+
+> 適用於剛開始建立資訊安全政策的小型公民團體
+
+!!! danger "優先"
+
+ 1. **密碼強度規定**:所有帳號的密碼必須包含至少 12 個字元,並包括大寫字母、小寫字母、數字及特殊符號。
+ 2. **定期更換密碼**:所有帳號需每六個月定期更換密碼,以增加安全性。
+ 3. **多因素驗證**:如有可能,啟用多因素驗證(2FA)來增加帳號安全性。
+ 4. **帳號註銷規範**:若會員離開團體,其帳號需立即被停用並註銷。
+ 5. **權限最小化原則**:每位成員僅被賦予完成其職責所需的最低權限。
+ 6. **帳號稽核記錄**:保持帳號使用和權限變更的紀錄,以便後續追蹤和審查。
+ 7. **臨時帳號使用規範**:臨時帳號使用期限不得超過五天,且使用完畢後需立即停用。
+
+!!! info "建議"
+
+ 1. **密碼管理軟體**:鼓勵所有成員使用密碼管理軟體來存儲和管理密碼。
+ 2. **登入通知**:設定異常登入通知功能,以利迅速回應潛在的安全威脅。
+ 3. **帳號共用限制**:嚴格禁止共用帳號,確保每人使用單一的個人帳號。
+ 4. **密碼恢復程序**:制定明確的密碼恢復程序,以避免濫用和資安風險。
+ 5. **權限複審**:定期(每三個月)複審成員的權限,確保符合當前職務需求。
+ 6. **成員離職清單**:保有成員離職清單並定期檢查,確認該成員的帳號已被停用。
+ 7. **帳號命名規範**:統一帳號命名規範,以利管理和識別。
+
+!!! warning "須知"
+
+ 1. **密碼破解技術**:了解常見的密碼破解方法以便制定更有效的密碼策略。
+ 2. **多因素驗證的工作原理**:學習多因素驗證的基本概念和操作方法。
+ 3. **帳號稽核工具**:熟悉如何使用帳號稽核工具來追蹤和分析帳號活動。
+ 4. **權限控制模型**:了解角色和權限管理的基本原則及其應用。
+ 5. **賬號鎖定政策**:學習設置賬號鎖定機制以防範暴力破解。
+ 6. **安全日誌**:理解日誌記錄的重要性及如何分析日誌資料。
+ 7. **個人資料保護法**:熟悉國內外相關個人資料保護法律法規。
+
+!!! quote "選用"
+
+ 1. **單一登錄(SSO)**:如有可能,採用單一登錄技術以簡化管理和增強安全性。
+ 2. **安全培訓**:定期舉辦資訊安全培訓,提高成員的安全意識。
+ 3. **密碼歷史機制**:設置密碼歷史機制以防止成員重複使用舊密碼。
+ 4. **自動登出**:啟用長時間不活動後自動登出的功能,減少風險。
+ 5. **外部帳號評估**:定期評估和清理不再需要的外部帳號。
+ 6. **機敏資料標註**:標註並管理存儲於帳號內的機敏資料。
+ 7. **針對行動裝置的安全規範**:制定和宣導針對行動裝置的資訊安全規範。
+
+## 進階版本
+
+> 適用於已有一定資訊安全政策基礎且規模較大的公民團體
+
+??? danger "進階版本"
+
+ !!! danger "優先"
+
+ 1. **強制多因素驗證(MFA)**:所有帳號強制啟用多因素驗證。
+ 2. **密碼複雜度加強**:密碼必須包含至少 16 個字元且不可包含連續字元。
+ 3. **動態密碼系統(OTP)**:加入動態密碼系統以加強帳號安全。
+ 4. **帳號鎖定機制**:連續失敗登入達三次,帳號自動鎖定並需管理員解鎖。
+ 5. **監控和通報策略**:設定即時監控系統,發現異常活動立即通報相關單位。
+ 6. **權限審核制度化**:大幅度修改權限時,需經過組織內部的審核程序。
+ 7. **定期安全稽核**:每半年進行一次全組織範圍的帳號和權限安全稽核。
+
+ !!! info "建議"
+
+ 1. **角色分離原則**:確保不同角色之間有明確分離,防範內部竊取風險。
+ 2. **資料數據加密儲存**:儲存在帳號中的重要資料需進行加密處理。
+ 3. **密碼分發管理器**:使用密碼分發管理器來管理和分發高安全等級密碼。
+ 4. **自動化權限管理**:積極採用自動化工具來進行權限分配和管理。
+ 5. **多元驗證手段**:在關鍵系統中,加入不同種類的驗證手段如生物識別驗證等。
+ 6. **使用者行為分析**:根據日常行為,定期分析使用者行為並調整安全策略。
+ 7. **外部專家顧問**:不定期邀請資安專家顧問來進行安全評估及建議。
+
+ !!! warning "須知"
+
+ 1. **進階加密技術**:學習並了解進階加密技術及其應用。
+ 2. **風險評估模型**:具備風險評估的基礎知識,能夠對潛在風險進行評估。
+ 3. **零信任架構**:了解零信任架構的概念和適用場景。
+ 4. **安全事件反應流程**:學習及熟悉處理安全事件的基本流程和原則。
+ 5. **驗證方法新趨勢**:持續關注新的驗證方法和技術動向,如生物識別技術。
+ 6. **雲端安全最佳實踐**:熟悉雲端平台的安全最佳實踐和策略。
+ 7. **資料遮罩技術(Data Masking)**:了解並應用資料遮罩技術來保護機敏資料。
+
+ !!! quote "選用"
+
+ 1. **行為式驗證(Behavioral Authentication)**:考慮採用行為式驗證以提升安全性。
+ 2. **數位身分識別**:使用更先進的數位身分識別技術如Public Key Infrastructure (PKI)。
+ 3. **自學工具**:使用自學工具來提升團體內成員資安知識。
+ 4. **災後恢復計畫(DRP)**:制定並測試災後恢復計畫以保障資料和服務的持續性。
+ 5. **細粒度訪問控制**:實施細粒度訪問控制來進一步細分成員的訪問權限。
+ 6. **機器學習風險評估**:採用機器學習技術來進行更準確的風險評估和漏洞檢測。
+ 7. **持續改進機制**:設定持續改進機制,定期根據最新威脅和漏洞進行政策更新。
diff --git a/docs/policy/devices.md b/docs/policy/devices.md
new file mode 100644
index 0000000..c6b933a
--- /dev/null
+++ b/docs/policy/devices.md
@@ -0,0 +1,119 @@
+---
+icon: octicons/devices-24
+title: 裝置安全政策制定
+---
+
+# :octicons-devices-24: 「裝置安全」政策制定
+
+資訊安全政策範本分為基礎版與進階版,各版本分別再分為四個等級類型,請衡量組織的狀況作適當的調整。
+
+!!! tip ""
+
+ 「裝置安全」包含章節內容中的「[裝置安全](../chapter/devices.md)」並適用於但不侷限以下作業系統:
+
+ - :material-cellphone-information: [iOS]、:material-microsoft-windows: [Windows]、:material-apple-finder: [macOS]、:simple-android: [Android]。
+
+ [iOS]: ../user_guide/devices/ios.md
+ [Windows]: ../user_guide/devices/windows.md
+ [macOS]: ../user_guide/devices/macOS.md
+ [Android]: ../user_guide/devices/android.md
+
+## 等級說明
+
+| 等級 | 說明 |
+| :---: | ------------------------ |
+| 優先 | 需優先且必須達成的項目。 |
+| 建議 | 完成或達成該項目會更好。 |
+| 須知 | 需先瞭解相關的背景知識。 |
+| 選用 | 額外的建議或其他的選項。 |
+
+## 基礎版本
+
+> 適用於剛開始建立資訊安全政策的小型公民團體
+
+!!! danger "優先"
+
+ 1. **強密碼設定**:所有內部電子設備必須設置強密碼,包括大寫字母、小寫字母、數字及特殊字符。
+ 2. **螢幕鎖定**:所有工作裝置需設置自動螢幕鎖定,閒置時間不要超過 3 ~ 5 分鐘。
+ 3. **設備更新**:定期檢查並安裝所有設備的系統和應用更新,確保最新的安全更新已安裝。
+ 4. **防毒軟體**:在所有設備上安裝並定期更新防毒軟體,執行定期掃描。
+ 5. **網路連接**:連接組織內網的所有裝置必須經過批准並進行適當配置。
+ 6. **設備共享限制**:嚴禁將工作裝置與家庭成員或其他未經授權的人員共用。
+ 7. **USB 使用限制**:限制 USB 和其他外部儲存裝置的使用,僅允許經過批准的裝置接入。
+
+!!! info "建議"
+
+ 1. **自動更新**:啟用所有設備的自動更新功能,以確保安全修正及時安裝。
+ 2. **防盜軟體**:在筆記型電腦和其他可攜帶設備上安裝定位與防盜軟體,以防設備遺失或被盜。
+ 3. **備份策略**:制定並實施設備資料的定期備份策略,備份應儲存在安全位置。
+ 4. **安全培訓**:定期提供成員有關設備安全使用的培訓,提升資訊安全意識。
+ 5. **防火牆**:確保內部設備的防火牆已經正確配置並啟用。
+ 6. **資安稽核**:定期進行內部資安稽核,檢查設備設定安全性。
+ 7. **設備安全管理**:實施設備管理方案,集中管理和紀錄所有內部設備。
+
+!!! warning "須知"
+
+ 1. **基本資安概念**:理解基本的資訊安全概念,如風險管理、威脅與漏洞等。
+ 2. **社交工程攻擊**:了解社交工程攻擊的常見手法及其防範措施。
+ 3. **物理安全**:認識到物理安全對於設備安全的重要性,避免設備被盜或損壞。
+ 4. **遠端工作風險**:了解遠端工作時可能面臨的資安風險及其防護措施。
+ 5. **資料加密方法**:熟悉基本的資料加密方法及其實際應用場景。
+ 6. **網路釣魚**:了解網路釣魚攻擊的常見手法及其防範方法。
+ 7. **行動裝置安全**:了解如何保護行動裝置(如手機和平板)的資訊安全。
+
+!!! quote "選用"
+
+ 1. **零信任網路**:考慮實施零信任網路架構,以增強內部網路的安全性。
+ 2. **端對端加密**:在內部通訊中推行端對端加密技術,確保通訊內容安全。
+ 3. **使用者權限管理**:實行詳細的使用者權限管理,僅授予必要的存取權限。
+ 4. **安全引導**:為所有內部新進成員提供設備安全引導,確保其了解基本的安全操作。
+ 5. **虛擬私人網路(VPN)**:內部網路應使用 VPN 來保護資料傳輸的隱密性。
+ 6. **設備淘汰處理**:建立安全的設備淘汰及資料銷毀流程,確保無資料洩露風險。
+ 7. **即時監控**:考慮引入即時網路及設備監控通報,及時發現並應對安全威脅。
+
+## 進階版本
+
+> 適用於已有一定資訊安全政策基礎且規模較大的公民團體
+
+??? danger "進階版本"
+
+ !!! danger "優先"
+
+ 1. **多因素驗證**:所有內部設備登錄都應使用多因素驗證(MFA)機制,提升帳號安全。
+ 2. **設備編號及登記**:所有內部設備需登記編號,建立詳細的設備管理後台。
+ 3. **入侵檢測系統(IDS)**:實施入侵檢測系統,監控內部網路並及時預警異常行為。
+ 4. **加密儲存**:所有機敏資料儲存於設備上須均加密,確保無法被未經授權人員解讀。
+ 5. **災後復原**:實施全面的災後復原計劃,以在發生網路攻擊或設備故障時迅速恢復。
+ 6. **即時威脅監測**:使用即時威脅監測工具,識別並防範潛在網路攻擊。
+ 7. **自動化更新管理**:利用管理工具自動化更新程式的佈署與安裝,確保設備安全。
+
+ !!! info "建議"
+
+ 1. **白名單軟體管理**:實行白名單控制,僅允許使用經過批准的軟體和應用程式。
+ 2. **細粒度存取控制**:實施細粒度存取控制(如角色為基礎的存取控制(RBAC)),明確分配存取權限。
+ 3. **行為檢測**:引入行為檢測技術,分析設備使用行為,識別異常活動。
+ 4. **資安報告**:定期產生並審查內部裝置的資安狀況報告。
+ 5. **資料外洩防護(DLP)**:佈署資料外洩防護系統,防止機敏資料未授權的外洩。
+ 6. **漏洞掃描**:定期進行設備和網路的漏洞掃描,識別並修復潛在的安全漏洞。
+ 7. **變更管理**:實行嚴格的變更管理流程,確保所有設備更新和設定變更經過審批和測試。
+
+ !!! warning "須知"
+
+ 1. **進階加密技術**:深入了解進階加密技術如非對稱加密、公鑰基礎設施(PKI)等。
+ 2. **威脅情報**:了解如何使用威脅情報來提前預警和防範網路威脅。
+ 3. **端點偵測與回應(EDR)**:熟悉 EDR 技術及其運用。
+ 4. **安全合規標準**:了解並遵循 ISO 27001 等國際資安標準,提升組織整體安全水準。
+ 5. **分層防禦**:掌握分層防禦策略,利用多層次的防護措施保護內部資產。
+ 6. **情境感知**:學習使用情境感知技術,在不同環境下實施適應性資安策略。
+ 7. **資安事件回應**:理解資安事件回應及管理相關流程和工具。
+
+ !!! quote "選用"
+
+
+ 1. **硬體安全**:考慮實施硬體安全模組(HSM),保護關鍵密鑰。
+ 2. **數位對映**:進行數位對映(Digital Twin)建模,模擬可能的網路攻擊路徑和影響。
+ 3. **深度學習技術**:探討將深度學習技術應用於威脅偵測,提升風險預測能力。
+ 4. **跨平台協同**:實施跨平台的資安協同機制,統一管理不同操作系統的設備。
+ 5. **定期資安演習**:進行定期資安攻擊演習,測試組織對網路攻擊的應對能力。
+ 6. **量子加密探索**:研究量子加密技術的發展動態,做好未來技術升級的準備。
+ 7. **外部資安評估**:諮詢外部資安專家定期進行評估,提供第三方資安檢查和改進建議。
diff --git a/docs/policy/e2ee.md b/docs/policy/e2ee.md
new file mode 100644
index 0000000..cc2fb3e
--- /dev/null
+++ b/docs/policy/e2ee.md
@@ -0,0 +1,111 @@
+---
+icon: material/shield-lock
+title: 加密通訊資安政策
+---
+# :material-shield-lock: 加密通訊資安政策
+
+資訊安全政策範本分為基礎版與進階版,各版本分別再分為四個等級類型,請衡量組織的狀況作適當的調整。
+
+!!! tip ""
+
+ 「加密通訊資安政策」包含章節內容中的「[加密通訊](../chapter/e2ee/index.md)」、「[加密即時通訊](../chapter/e2ee/im.md)」、「[加密電子郵件](../chapter/e2ee/mails.md)」。
+
+## 等級說明
+
+| 等級 | 說明 |
+| :---: | ------------------------ |
+| 優先 | 需優先且必須達成的項目。 |
+| 建議 | 完成或達成該項目會更好。 |
+| 須知 | 需先瞭解相關的背景知識。 |
+| 選用 | 額外的建議或其他的選項。 |
+
+## 基礎版本
+
+> 適用於剛開始建立資訊安全政策的小型公民團體
+
+!!! danger "優先"
+
+ 1. **加密即時通訊工具**:選擇即時通訊工具時,應優先選用提供端到端加密的工具(例如:Signal、WhatsApp)。
+ 2. **加密電子郵件通訊**:發送含有機敏資訊的電子郵件時,應使用內建的加密功能(如:Gmail 提供的機密模式)或第三方加密插件(如:ProtonMail、Tuta)。
+ 3. **兩步驟驗證**:所有成員的即時通訊工具與電子郵件帳號應啟用兩步驟驗證,以提高帳號安全性。
+ 4. **密碼管理**:應使用密碼管理工具(如:Bitwarden、1Password)以便產生和儲存強密碼。
+ 5. **軟體更新**:即時通訊應用程式和電子郵件客戶端應保持最新,避免使用過期或不安全的版本。
+ 6. **安全連線**:應確保連線至即時通訊工具與電子郵件伺服器時,使用 HTTPS 或其他加密連線協議。
+ 7. **設備安全**:成員應設置螢幕鎖定密碼或生物識別技術,保護裝置內的資料安全。
+
+!!! info "建議"
+
+ 1. **培訓與教育**:定期為成員舉辦資安培訓,說明加密通訊的重要性和實務技巧。
+ 2. **定期更換密碼**:建議成員每 3-6 個月更換一次即時通訊工具和電子郵件的密碼。
+ 3. **安全信任鏈**:在交換公開密鑰時,應透過安全的渠道(如面對面)確認對方的身份。
+ 4. **瀏覽器擴充工具**:建議安裝瀏覽器防護擴充工具。
+ 5. **安全備份**:備份含有重要通訊記錄的裝置,並確保備份檔案也受到加密保護。
+ 6. **機敏資料標記**:發送電子郵件時,使用標記(如:「機密」)來提醒接收人進一步保護資料。
+ 7. **清除快取記錄**:定期清除即時通訊工具與電子郵件客戶端的快取和存放的暫存記錄。
+
+!!! warning "須知"
+
+ 1. **加密算法**:認識常見的加密算法(如 AES、RSA)的基本概念與差異。
+ 2. **數位簽章**:瞭解數位簽章的原理與用途,以便未來組織內部應用。
+ 3. **信任根證書**:瞭解根證書的概念及其對 HTTPS 安全的重要性。
+ 4. **電子郵件加密插件**:瞭解如何安裝及使用常見的電子郵件加密插件,例如 PGP。
+ 5. **社交工程攻擊**:學會辨識社交工程攻擊的常見手法,保護個人及組織資料。
+ 6. **隱私政策**:瞭解各常用通訊工具及電子郵件服務的隱私政策內容。
+ 7. **洩漏應對措施**:瞭解資料洩漏時應採取的應對措施及通報流程。
+
+!!! quote "選用"
+
+ 1. **自架伺服器**:研究即時通訊工具及電子郵件伺服器的自架設計,提高控制能力。
+ 2. **硬體加密設備**:考慮使用硬體加密裝置(如 USB 加密鑰匙)提高安全性。
+ 3. **匿名通訊工具**:探索和試用高匿名性的通訊工具(如 TOR-based 通訊應用)。
+ 4. **定期安全稽核**:定期進行內部安全稽核,檢查加密策略是否有效。
+ 5. **開源解決方案**:使用開源的即時通訊和電子郵件加密解決方案(如 Element)。
+ 6. **法律及合規**:深入瞭解與通訊加密相關的法律規範與合規要求。
+ 7. **資安團隊合作**:與國內或國際的資安團體或行動者合作,了解並採用最新的加密技術和策略。
+
+## 進階版本
+
+> 適用於已有一定資訊安全政策基礎且規模較大的公民團體
+
+??? danger "進階版本"
+
+ !!! danger "優先"
+
+ 1. **磁碟加密**:所有成員的設備應開啟磁碟加密功能(如 BitLocker 或 FileVault)。
+ 2. **數位簽章應用**:所有外部文件及電子郵件應加上數位簽章,確保文件完整性與可信任來源。
+ 3. **端對端加密**:所有即時通訊與電子郵件應使用端對端加密技術。
+ 4. **加密憑證管理**:定期更新和管理使用的加密憑證,避免過期或被撤銷。
+ 5. **傳輸層加密**:除了 HTTPs,鼓勵採用 TLS/SSL 技術應用於所有電子郵件伺服器。
+ 6. **多因子驗證**:啟用多因子驗證(MFA),強化各種應用程式的安全性。
+ 7. **安全通訊指南**:制訂並落實一套詳細的內部安全通訊指南,包含加密應用和來源情報保護。
+
+
+ !!! info "建議"
+
+ 1. **DLP(資料流失防護)**:設定 DLP 政策,防止機敏資訊未經授權發送。
+ 2. **內網隔離**:在內部網路上實現隔離方案,保護機敏資料的流通。
+ 3. **加密郵件閘道**:部署加密郵件閘道,保護內外部的電子郵件通訊。
+ 4. **多重加密層**:結合多層加密技術,以保護高機敏資料。
+ 5. **漏洞掃描與評估**:定期進行即時通訊和電子郵件所使用的工具的漏洞掃描。
+ 6. **外包通訊安全評估**:考慮委託外部專業資安單位進行定期的通訊安全評估。
+ 7. **入侵檢測系統**:採用網路入侵檢測系統(IDS)監控內、外部的可疑活動。
+
+ !!! warning "須知"
+
+ 1. **對稱與非對稱加密**:深入瞭解對稱加密和非對稱加密的實作與應用。
+ 2. **零知識證明**:學習零知識證明技術的應用場景及其在通訊加密中的應用。
+ 3. **混沌網路**:研究混沌網路技術,提升通訊和資料傳輸的匿名性及安全性。
+ 4. **後量子密碼學**:瞭解後量子密碼學的基本概念及其未來應用。
+ 5. **隱寫術**:學習隱寫術技術,以便未來利用隱寫術進行隱密資料傳輸。
+ 6. **同態加密**:了解同態加密的基本原理及其在安全運算中的應用。
+ 7. **區塊鏈應用**:研究區塊鏈技術在安全通訊及資料保護上的潛在應用。
+
+ !!! quote "選用"
+
+ 1. **加密即時訊息備份**:實施加密即時訊息備份方案,確保資料在備份過程中也受保護。
+ 2. **分散式通訊**:探討部署分散式通訊架構,增強抗襲擊能力。
+ 3. **智慧合約**:利用智慧合約技術,提升通訊和交易的安全性與自動化。
+ 4. **去中心化通訊平台**:考慮使用去中心化的即時通訊平台(如 Matrix)。
+ 5. **隱私強化計劃**:制定和落實隱私強化計劃,全面保護組織及成員隱私。
+ 6. **自適應安全架構**:建立自適應安全架構,快速應對動態威脅。
+ 7. **隱私法遵循**:深入瞭解各國隱私法規,確保所有通訊策略符合相關法規要求。
diff --git a/docs/policy/files_management.md b/docs/policy/files_management.md
new file mode 100644
index 0000000..2534c97
--- /dev/null
+++ b/docs/policy/files_management.md
@@ -0,0 +1,111 @@
+---
+icon: material/folder-open
+title: 資料管理與備份
+---
+
+# :material-folder-open: 資料管理與備份
+
+資訊安全政策範本分為基礎版與進階版,各版本分別再分為四個等級類型,請衡量組織的狀況作適當的調整。
+
+!!! tip ""
+
+ 「資料管理與備份」包含章節內容中的「[檔案存取權限](../chapter/files_management/files_access.md)」、「[資料備份與封存](../chapter/files_management/backup_archive.md)」、「[更新軟體](../chapter/files_management/software_update.md)」。
+
+## 等級說明
+
+| 等級 | 說明 |
+| :---: | ------------------------ |
+| 優先 | 需優先且必須達成的項目。 |
+| 建議 | 完成或達成該項目會更好。 |
+| 須知 | 需先瞭解相關的背景知識。 |
+| 選用 | 額外的建議或其他的選項。 |
+
+## 基礎版本
+
+> 適用於剛開始建立資訊安全政策的小型公民團體
+
+!!! danger "優先"
+
+ 1. **資料管理與備份使用者教育**:每位團體成員必須接受基礎資料管理與備份的教育,瞭解其重要性。
+ 2. **檔案存取權限控制**:所有成員必須為其資料設定密碼並定期更換(至少每三個月一次)。
+ 3. **週期性資料備份**:每個成員的工作資料必須在每週末備份一次,備份副本存放在異地硬碟上。
+ 4. **軟體更新**:每個成員在使用任何軟體之前,須確認其已更新至最新版本。
+ 5. **基本防毒軟體安裝**:所有工作設備必須安裝防毒軟體,並定期更新病毒碼。
+ 6. **建立事故報告流程**:發現任何資料遺失或異常,必須立即向主要負責人報告。
+ 7. **阻止外部裝置自動執行**:應設定裝置阻止 USB 等外部儲存裝置的自動執行功能。
+
+!!! info "建議"
+
+ 1. **資料分類與標記**:每個成員對於其整理的資料進行分類和標記,以便於管理和查找。
+ 2. **設置唯一帳號與密碼**:每個成員在使用組織內部系統時必須使用唯一的帳號和密碼登入。
+ 3. **限制網路存取範圍**:限制所有成員的網路存取範圍,僅允許訪問與工作相關的網站。
+ 4. **軟體使用清單**:制定允許和禁止使用的軟體清單,要求成員避免使用來路不明的軟體。
+ 5. **定期檢查與審查紀錄**:每季度定期檢查並記錄資料備份與存取權限情況。
+ 6. **定期防毒掃描**:要求成員每月進行一次全系統的防毒掃描。
+ 7. **提供簡易安全手冊**:制定並分發一份簡易的資訊安全手冊給每位成員。
+
+!!! warning "須知"
+
+ 1. **備份副本管理**: 瞭解如何正確存放和管理備份副本。
+ 2. **加密技術基礎**:瞭解基本的資料加密技術及其應用方式。
+ 3. **資訊安全基本實務**:瞭解什麼是資訊安全,包括常見的威脅與應對策略。
+ 4. **密碼策略**:瞭解如何設定強密碼以及密碼管理的常見方法。
+ 5. **軟體更新的重要性**:瞭解為何及如何進行軟體更新。
+ 6. **非法存取的風險與影響**:瞭解非法存取所帶來的風險與影響。
+ 7. **資料刪除的正確方法**:瞭解如何正確且安全地刪除機敏資料。
+
+!!! quote "選用"
+
+ 1. **雲端備份**:考慮使用雲端備份服務作為額外的備份手段。
+ 2. **虛擬私人網路(VPN)**:對工作機敏性的資料進行傳輸時,可考慮使用 VPN 以增強安全性。
+ 3. **定期安全培訓**:每半年進行一次內部安全培訓工作坊或講座。
+ 4. **使用雙重認證**:在系統登入或重要操作中,使用雙重認證以提升安全性。
+ 5. **指定資安負責人**:指定一位成員為資安負責人,負責日常的安全管理和應急處理。
+ 6. **資料存取記錄**:實施資料存取日誌管理,紀錄並定期稽核存取紀錄。
+ 7. **社交工程防護**:針對社交工程攻擊,進行課程培訓並制定相關防護措施。
+
+## 進階版本
+
+> 適用於已有一定資訊安全政策基礎且規模較大的公民團體
+
+??? danger "進階版本"
+
+ !!! danger "優先"
+
+ 1. **落實定期資料備份檢查**:所有成員每週定期檢查備份的有效性,確保備份資料可用。
+ 2. **限定存取權限**:根據工作需要限定成員對資料的存取權限,避免資料過度曝光。
+ 3. **多層次資料備援**:設置多層次備份(例如:本地、異地和雲端備份),以提升資料安全。
+ 4. **強制內部網路隔離**:內部網路進行分區隔離,重要資料與一般工作資料分開存放。
+ 5. **系統漏洞修補**:及時應用所有系統和應用程式的安全性更新和修補程式。
+ 6. **啟動全磁碟加密**:對所有工作設備進行全磁碟加密,防止資料被非法取得。
+ 7. **落實密碼強度規定**:強制限制密碼設定須包括大小寫字母、數字和特殊符號,且長度不少於 16 位。
+
+ !!! info "建議"
+
+ 1. **資料存取稽核**:定期對資料存取行為進行稽核,辨識並應對異常行為。
+ 2. **使用加密通訊**:所有內部資料傳輸須使用加密通訊協議(如 TLS/SSL)。
+ 3. **週期性安全評估**:每半年進行一次完整的安全評估,識別並修正潛在的安全風險。
+ 4. **政策更新檢視**:每年檢視並更新資訊安全政策,確保其持續適用。
+ 5. **特定資料異地同步**:對部分特定資料進行即時異地同步儲存,以便能立即恢復。
+ 6. **導入資源監控**:對成員使用的資源(如:存取頻率、頻寬使用等)進行監控。
+ 7. **導入端點檢測與回應(EDR)**:增加設備端點的安全監控,及時應對攻擊事件。
+
+ !!! warning "須知"
+
+ 1. **高等級加密技術**:瞭解高等級的加密技術及其在工作中的應用。
+ 2. **緊急應變計畫制訂與演練**:制定並定期演練緊急應變計畫,確保在資料洩漏或攻擊發生時快速反應。
+ 3. **跨平台的安全措施**:瞭解並實行不同平臺(如 Windows、Mac、Linux)上的安全措施。
+ 4. **資安事件反應流程**:瞭解並實行標準的資安事件反應流程。
+ 5. **安全設備使用**:瞭解及妥善使用各種安全設備(如 防火牆、DLP)。
+ 6. **社交工程威脅認識**:更深入瞭解社交工程威脅,學習防範方法。
+ 7. **多因素認證(MFA)技術**:瞭解和應用多因素認證技術,提高登入安全性。
+
+ !!! quote "選用"
+
+ 1. **企業級雲端安全**:引入企業級的雲端安全解決方案,進一步提升雲端資料的安全性。
+ 2. **端點安全管理 ESM**:實行端點安全管理,提供更細緻且即時的端點保護與管理。
+ 3. **持續滲透測試**:進行持續或間歇性滲透測試,找出並修補潛在漏洞。
+ 4. **自行托管伺服器**:考慮自行托管伺服器,以完全掌握資料的控制權與安全性。
+ 5. **數位簽章技術**:使用數位簽章技術,確保資料的完整性及來源的真實性。
+ 6. **網路流量分析**:引入網路流量分析工具,持續監控並分析不正常的網路行為。
+ 7. **自動化資訊安全解決方案**:導入自動化的資訊安全解決方案,替代部分人工操作,減少人為錯誤。
diff --git a/docs/policy/index.md b/docs/policy/index.md
new file mode 100644
index 0000000..ea10ab5
--- /dev/null
+++ b/docs/policy/index.md
@@ -0,0 +1,60 @@
+---
+icon: octicons/log-16
+title: 政策制定
+---
+
+# :octicons-log-16: 政策制定
+
+???+ abstract "學習歷程:「政策制定」"
+
+
+
+ 您目前在「[政策制定]」,依政策範本建立組織內的規範並落實執行。(完整流程:「[章節內容]」、「[操作手冊]」、「[政策制定]」、「[狀態評估]」、「[關懷與諮詢]」)
+
+ [章節內容]: ../chapter/index.md
+ [操作手冊]: ../user_guide/index.md
+ [政策制定]: ../policy/index.md
+ [狀態評估]: ../assessment/index.md
+ [關懷與諮詢]: ../support/index.md
+
+在組織內制定政策是確保組織順利運作並保護資訊資產的重要一環。政策是一套明確的規範和指引,旨在引導組織成員的行為和決策,以確保符合保護資訊安全和維護組織重要資產。
+
+政策的制定是一個持續的過程,需要不斷地進行評估和改進。隨著組織環境的變化和新的威脅的出現,政策需要不斷地進行修訂和更新,以確保其仍然符合組織的需求和目標。
+
+本章節將以「章節內容」各主題項目提供相對應的「**政策範本**」,可參考後依組織狀況、適時調整並制定與落實。
+
+
+
+## 制定流程
+
+
+
+### 範本參考
+
+政策範本可參考來自教材網站上的素材,協助您與組織能迅速從零開始建立政策。在這個期間,也將一併盤點組織內已在執行的政策或工作規範,是否能補強或是合併為教完整的規範。
+
+### 政策制定
+
+「政策制定小組」在頒佈修正或更新後的資安政策後,可召集全體夥伴參與檢視新版本內容,可提供線上共筆文件呈現或紀錄討論過程。
+
+### 政策落實
+
+完成全體夥伴的參與討論與修正後,「政策制定小組」須正式頒布與公告執行時間,政策規範內容也建議放置在組織內夥伴方便取閱的位置。
+
+### 意見回饋
+
+在資安政策實行過程中,持續且開放的蒐集組織內夥伴的意見回饋,可持續使用線上共筆文件做意見蒐集管道,或提供問卷表單方式蒐集。
+
+!!! success "定期檢視"
+
+ - 「政策制定」、「政策落實」建議每六個月定期審視、增補修訂,並與「意見回饋」所蒐集到的事項進行新一輪的討論。
+ - 如修訂過程中遇到任何困難,可諮詢服務導入團隊予以協助。
diff --git a/docs/policy/network.md b/docs/policy/network.md
new file mode 100644
index 0000000..f15c1bd
--- /dev/null
+++ b/docs/policy/network.md
@@ -0,0 +1,111 @@
+---
+icon: material/microsoft-internet-explorer
+title: 網路使用行為資安政策
+---
+
+# :material-microsoft-internet-explorer: 網路使用行為資安政策
+
+資訊安全政策範本分為基礎版與進階版,各版本分別再分為四個等級類型,請衡量組織的狀況作適當的調整。
+
+!!! tip ""
+
+ 「網路使用行為資安政策」包含章節內容中的「[隱私瀏覽行為](../chapter/network/browser_privacy.md)」、「[釣魚、詐騙](../chapter/network/phishing.md)」、「[VPN](../chapter/network/vpn.md)」、「[網路與 Wi-Fi](../chapter/network/wifi.md)」。
+
+## 等級說明
+
+| 等級 | 說明 |
+| :---: | ------------------------ |
+| 優先 | 需優先且必須達成的項目。 |
+| 建議 | 完成或達成該項目會更好。 |
+| 須知 | 需先瞭解相關的背景知識。 |
+| 選用 | 額外的建議或其他的選項。 |
+
+## 基礎版本
+
+> 適用於剛開始建立資訊安全政策的小型公民團體
+
+!!! danger "優先"
+
+ 1. 所有成員在連接公共 Wi-Fi 時,必須使用 VPN 確保連線安全。
+ 2. 禁止在未知或不受信任的網站上輸入個人隱私機敏訊息,如密碼、身分證號等。
+ 3. 組織內部所有網路設備(如路由器)需設定強密碼且定期更換。
+ 4. 請勿點擊任何未知或可疑的電子郵件連結及附件,以防釣魚和詐騙攻擊。
+ 5. 定期掃描並更新個人裝置上的防毒軟體,以確保設備安全。
+ 6. 所有成員應使用強密碼並啟用雙因素認證功能。
+ 7. 禁止下載和使用來自未授權或不受信任的應用程式。
+
+!!! info "建議"
+
+ 1. 鼓勵成員定期參加資訊安全意識培訓,提升資安知識。
+ 2. 在使用社群媒體時,應謹慎分享個人及組織資訊,避免資料洩漏。
+ 3. 使用隱私模式瀏覽網頁,保護個人隱私。
+ 4. 建立定期備份資料的習慣,防範資料遺失或被加密勒索。
+ 5. 對不明來歷的電子郵件應報告給組織中的相關負責人。
+ 6. 關閉不使用的 Wi-Fi 功能及藍牙連接,以減少被攻擊的風險。
+ 7. 設定網路設備的管理界面只允許內網訪問,避免透過對外網路直接訪問。
+
+!!! warning "須知"
+
+ 1. 瞭解基本的網路安全概念,如什麼是釣魚攻擊、勒索病毒等。
+ 2. 熟悉 VPN 的基本運作原理及使用方法。
+ 3. 瞭解公眾 Wi-Fi 的安全風險及如何透過 VPN 保護自身安全。
+ 4. 熟悉常見釣魚詐騙的手法和判斷方法。
+ 5. 掌握隱匿網路足跡的方法,如清除瀏覽器記錄、使用隱私模式等。
+ 6. 瞭解如何設定及管理路由器,包括 WPA3 等加密協議設定。
+ 7. 熟悉並善用防毒軟體和網路安全工具。
+
+!!! quote "選用"
+
+ 1. 考慮使用安全的電子郵件服務提供者,提供額外的安全保護。
+ 2. 使用安全性較高的瀏覽器插件,如 uBlock origin 等工具減低釣魚詐騙風險。
+ 3. 安裝網路監控工具,即時洞察可疑網路活動。
+ 4. 使用不同的平台(如電腦、手機)時,應遵循相同的安全策略。
+ 5. 零信任原則,定時檢查並移除不必要的帳戶權限。
+ 6. 安裝並定期更新防火牆提高網路安全。
+ 7. 利用密碼管理器,安全地儲存和管理多個密碼。
+
+## 進階版本
+
+> 適用於已有一定資訊安全政策基礎且規模較大的公民團體
+
+??? danger "進階版本"
+
+ !!! danger "優先"
+
+ 1. 強制所有成員必須使用有端對端加密技術的 VPN 服務。
+ 2. 每月定期進行自我學習、內部培訓,確保成員了解最新的釣魚攻擊手法。
+ 3. 組織需實施安全漏洞定期掃描和更新管理。
+ 4. 所有成員必須定期更換其所有帳號的密碼,且不能重複使用舊密碼。
+ 5. 禁止在公用電腦及公共網路(如網咖)使用組織帳號登入。
+ 6. 將多因素認證作為所有重要平台及服務的基本安全要求。
+ 7. 關鍵資料傳輸時,要求使用加密技術(如 SSL/TLS)。
+
+ !!! info "建議"
+
+ 1. 針對高風險活動(如金融交易、機敏資料訪問、關鍵人聯絡),要求進行額外的安全檢查。
+ 2. 購買授權的網路安全軟體及工具,以提供更高水準的保護。
+ 3. 組織內部常用網頁瀏覽與服務,應有白名單管理與定期審查機制。
+ 4. 所有設備禁止安裝在不信任網路環境下運行的應用程序。
+ 5. 督促成員使用個人管理平台來整理和備份機密及重要資料。
+ 6. 定期舉辦模擬釣魚測試,以驗證成員的防範意識。
+ 7. 使用網域名稱系統(DNS)保護服務,以防範 DNS 欺詐攻擊。
+
+ !!! warning "須知"
+
+ 1. 詳細瞭解並能解釋 VPN 的加密及隱私保護機制。
+ 2. 能夠識別並解釋複雜的釣魚詐騙手法及背後的技術機制。
+ 3. 瞭解 HTTPS 的重要性及如何判斷網站是否使用 HTTPS。
+ 4. 能夠獨立完成 Wi-Fi 加密設置,熟悉 WPA3 等高級加密標準。
+ 5. 能夠解釋並使用安全的密碼管理策略。
+ 6. 掌握基本網路協議安全(如 IPv6、DNSSEC等)的工作原理。
+ 7. 瞭解網路安全事故處理流程及應急預案。
+
+ !!! quote "選用"
+
+ 1. 定期審核組織內部安全政策,確保其隨技術變化而更新。
+ 2. 推動建立網上隱私及數據保護標準,同步全球最佳實踐。
+ 3. 引入流程自動化工具,如 SIEM,提高網路安全管理效能。
+ 4. 建議成員學習並獲取相關的資訊安全認證(例如 CISSP)。
+ 5. 使用行為分析工具監控異常使用行為,及時應對風險。
+ 6. 內部網站及服務,實施零信任網路原則,確保每次訪問都需要身份驗證。
+ 7. 開展網路安全前瞻性研究,探索並應用最新的安全技術。
diff --git a/docs/policy/profile.md b/docs/policy/profile.md
new file mode 100644
index 0000000..abee423
--- /dev/null
+++ b/docs/policy/profile.md
@@ -0,0 +1,111 @@
+---
+icon: material/smart-card
+title: 身分驗證資安政策
+---
+
+# :material-smart-card: 身分驗證資安政策
+
+資訊安全政策範本分為基礎版與進階版,各版本分別再分為四個等級類型,請衡量組織的狀況作適當的調整。
+
+!!! tip ""
+
+ 「身分驗證資安政策」包含章節內容中的「[密碼管理器](../chapter/profile/password_manager.md)」、「[密碼強度](../chapter/profile/password.md)」。
+
+## 等級說明
+
+| 等級 | 說明 |
+| :---: | ------------------------ |
+| 優先 | 需優先且必須達成的項目。 |
+| 建議 | 完成或達成該項目會更好。 |
+| 須知 | 需先瞭解相關的背景知識。 |
+| 選用 | 額外的建議或其他的選項。 |
+
+## 基礎版本
+
+> 適用於剛開始建立資訊安全政策的小型公民團體
+
+!!! danger "優先"
+
+ 1. 每位成員應自行設定一組唯一的登入帳號及密碼,且不得與其他成員共用。
+ 2. 密碼應至少包含 12 個字元,並包含大小寫字母、數字及特殊符號(如:`!@#$%^&*`)。
+ 3. 所有帳號每三個月須更換一次密碼。
+ 4. 發現帳號異常登入須立即通報負責人,並立即變更密碼。
+ 5. 禁止使用個人姓名、生日或簡單字典單詞作為密碼。
+ 6. 成員離開位置時需登出帳戶,或啟用螢幕鎖定功能。
+ 7. 禁止在公共設備上儲存登入密碼。
+
+!!! info "建議"
+
+ 1. 使用雙因素認證(2FA)增強帳號安全。
+ 2. 建議定期進行帳號登入的安全培訓或簡報會議。
+ 3. 利用密碼管理器紀錄各個平台的登入資訊,避免重複使用密碼。
+ 4. 定期巡查成員是否遵循安全政策(如:密碼強度)。
+ 5. 建議使用長密碼(如 16 個字元以上)的形式增強安全性。
+ 6. 當心釣魚攻擊,避免點擊可疑連結,輸入登入資訊。
+ 7. 使用安全的網路環境進行登入,避免在公共 Wi-Fi 進行帳號操作。
+
+!!! warning "須知"
+
+ 1. 學習密碼管理器的使用方式與其優缺點。
+ 2. 瞭解何謂雙因素認證及其運作模式。
+ 3. 了解成員登入習慣,釐清可能的安全風險。
+ 4. 深入了解釣魚攻擊的手法,提升網路安全警覺性。
+ 5. 學習如何辨識安全的網頁,例如檢查網址是否為 HTTPS。
+ 6. 了解密碼強度的基本概念與其重要性。
+ 7. 採取基本防護措施,例如設定救援金鑰做為密碼重設的手段。
+
+!!! quote "選用"
+
+ 1. 使用生物認證技術(如指紋辨識、Face ID)以取代傳統密碼登入。
+ 2. 設定忘記密碼的流程並設置安全問題。
+ 3. 定期檢查並更新軟體以確保系統安全。
+ 4. 檢討並調整成員登入行為與政策,使其更符合實際需求。
+ 5. 對於特定重要的系統或資料庫進行額外的登入防護。
+ 6. 聘請第三方進行定期的安全性測試。
+ 7. 採購硬體安全金鑰以進行更高度的安全登入。
+
+## 進階版本
+
+> 適用於已有一定資訊安全政策基礎且規模較大的公民團體
+
+??? danger "進階版本"
+
+ !!! danger "優先"
+
+ 1. 強制實施雙因素認證(2FA),以及對重要帳戶啟用多重因素認證(MFA)。
+ 2. 密碼必須至少包含12個字元,必須含有大寫字母、小寫字母、數字及至少一個特殊符號。
+ 3. 禁止重複使用舊密碼,以防止重複登入攻擊。
+ 4. 所有帳號每90天須更換密碼,並禁止連續使用前三次密碼。
+ 5. 密碼管理器的主密碼須設置得尤為強壯,並啟用雙因素認證。
+ 6. 定期進行帳號安全審查和異常登錄行為檢測。
+ 7. 資安異常事件、攻擊或威脅須即時通報至最高管理層。
+
+ !!! info "建議"
+
+ 1. 多數成員應參與資安培訓,特別是針對帳號登入與密碼管理的技巧與知識。
+ 2. 採用綜合的身份識別與存取管理系統(IAM),統一管理帳號與身分認證。
+ 3. 建議使用高可信度的密碼管理軟體(如 Bitwarden、1Password)。
+ 4. 定期更新密碼管理器的資料庫,以刪除不再使用的帳戶。
+ 5. 確保網路環境的安全性,如使用 VPN 進行遠端登入。
+ 6. 定期審核安全策略,調整密碼政策以應對新的安全威脅。
+ 7. 避免在相同應用程式上設置多個帳號以减少增加被盜風險。
+
+ !!! warning "須知"
+
+ 1. 瞭解密碼洩露風險及其後果,定期查詢資料外洩的相關報告。
+ 2. 深入掌握密碼管理器的各項功能,包括備份與恢復。
+ 3. 熟悉常見的社交工程攻擊手法,提升防範意識。
+ 4. 了解多重因素認證實施的多種形式(如實體硬體金鑰、OTP 一次性密碼、備用碼)。
+ 5. 了解基於風險的登入控制策略,以根據行為異常篩選並限制登入。
+ 6. 熟悉相關法規及資安合規要求,例如 GDPR 基本原則。
+ 7. 學習使用資源存取控制策略(如 ACL)以保護機敏資訊。
+
+ !!! quote "選用"
+
+ 1. 採用零信任架構以確保每次登入都進行驗證,無論內部或外部網路。
+ 2. 持續監測帳號活動,使用異常行為檢測技術即時回應可能的威脅。
+ 3. 探索人工智慧(AI)或機器學習技術,以提高異常登入行為的辨識。
+ 4. 使用定期自動化安全測試工具,檢查帳號登入的漏洞及弱點。
+ 5. 為高風險帳號啟用限速登入策略,以防止暴力破解攻擊。
+ 6. 將資安事件應變計畫納入培訓,確保所有成員清楚應對方式。
+ 7. 定期審查並更新所有安全政策和程序,確保其持續有效。
diff --git a/docs/policy/risk_assessment.md b/docs/policy/risk_assessment.md
new file mode 100644
index 0000000..1be24ed
--- /dev/null
+++ b/docs/policy/risk_assessment.md
@@ -0,0 +1,28 @@
+---
+icon: material/order-bool-descending-variant
+title: 政策制定:威脅建模
+---
+# 政策制定:威脅建模
+
+## 政策制定建議
+
+將威脅建模制定到組織中的政策是確保組織有效應對安全威脅的關鍵一環。以下將說明如何撰寫「威脅建模」政策內容於組織中:
+
+政策的內容應該明確定義威脅建模的目的和重要性。這包括對威脅建模的定義、其在資訊安全管理中的作用和意義的說明。政策應該清楚地表明,威脅建模是為了識別和評估組織面臨的安全威脅,以制定相應的防禦策略和措施,保護組織的資訊資產和運作安全。
+
+包括確定哪些資訊系統、應用程式或資產需要進行威脅建模,以及制定威脅建模的具體目標和預期成果。==政策應該要求組織對關鍵資產進行威脅建模,並對不同類型的威脅進行評估,以確保全面的安全防禦。==
+
+以下是建立風險評估政策時可以參考的項目:
+
+1. 目標與範圍明確化:該政策應該清楚界定其{==目標和範圍==}。明確的目標有助於指導風險評估的過程,確保所有相關方都對政策的目的有一致的理解。同時,明確的範圍有助於確定哪些風險和資產將被評估,以及哪些部門或人員將參與其中。
+2. 角色與責任分配:政策應明確界定組織內{==各個部門和個人==}在風險評估中的角色和責任。這包括負責進行風險評估的團隊成員、管理人員的審核和批准程序,以及風險評估結果的溝通和共享。
+3. 審查與改進機制:政策應該確定一個{==定期審查和改進的機制==},以持續提高風險評估的效能和效果。這可以是定期的政策回顧會議、風險評估流程的改進建議系統,或是對過去風險事件的學習和改進措施的推動。
+
+## 相關章節
+
+[:material-arrow-right-bold: 章節內容:威脅建模](../chapter/threat_modeling_class.md){ .md-button .md-button--primary }
+[:material-arrow-right-bold: 操作手冊:風險評估表](../user_guide/risk_assessment.md){ .md-button .md-button--primary }
+
+## 參考資料
+
+-
diff --git a/docs/stylesheets/extra.css b/docs/stylesheets/extra.css
new file mode 100644
index 0000000..98a53dd
--- /dev/null
+++ b/docs/stylesheets/extra.css
@@ -0,0 +1,50 @@
+@media screen and (min-width: 76.25em) {
+ nav.md-nav.md-nav--primary.md-nav--lifted > ul.md-nav__list > li.md-nav__item.md-nav__item--active > nav.md-nav > ul.md-nav__list > li.md-nav__item:not(:last-child) {
+ border-bottom: 1px solid #ababab;
+ padding: 10px 0 20px;
+ }
+
+ nav.md-nav.md-nav--primary.md-nav--lifted > ul.md-nav__list > li.md-nav__item.md-nav__item--active > nav.md-nav > ul.md-nav__list > li.md-nav__item:last-child {
+ padding: 10px 0 20px;
+ }
+
+ nav.md-nav.md-nav--primary.md-nav--lifted > ul.md-nav__list > li.md-nav__item.md-nav__item--active > nav.md-nav > ul.md-nav__list > li.md-nav__item.md-nav__item--nested > nav.md-nav {
+ padding-left: 17px;
+ }
+
+ nav.md-nav.md-nav--primary.md-nav--lifted > ul.md-nav__list > li.md-nav__item.md-nav__item--active > nav.md-nav > ul.md-nav__list > li.md-nav__item.md-nav__item--nested > nav.md-nav > ul > li.md-nav__item {
+ padding: 5px 0;
+ }
+
+ nav.md-nav.md-nav--primary.md-nav--lifted > ul.md-nav__list > li.md-nav__item.md-nav__item--active > nav.md-nav > ul.md-nav__list > li.md-nav__item.md-nav__item--active > div.md-nav__link.md-nav__container {
+ background-color: #E5E0FF;
+ padding: 10px;
+ border-radius: 5px;
+ color: #000000;
+ }
+
+ nav.md-nav.md-nav--primary.md-nav--lifted > ul.md-nav__list > li.md-nav__item.md-nav__item--active > nav.md-nav > ul.md-nav__list > li.md-nav__item.md-nav__item--active > div.md-nav__link.md-nav__container > a {
+ color: #000000;
+ }
+
+ nav.md-nav.md-nav--primary.md-nav--lifted > ul.md-nav__list > li.md-nav__item.md-nav__item--active > nav.md-nav > ul.md-nav__list > li.md-nav__item.md-nav__item--active > a.md-nav__link.md-nav__link--active {
+ background-color: #E5E0FF;
+ padding: 10px;
+ border-radius: 5px;
+ color: #000000;
+ }
+
+ nav.md-nav.md-nav--primary.md-nav--lifted > ul.md-nav__list > li.md-nav__item.md-nav__item--active > div.md-nav__link.md-nav__container {
+ display: none;
+ }
+}
+
+div.grid.cards > ul > li {
+ border-radius: 12px !important;
+ border: 2px solid #eae8f6 !important;
+}
+
+div.grid.cards > ul > li > p:first-child {
+ color: var(--md-typeset-a-color);
+ font-size: larger;
+}
\ No newline at end of file
diff --git a/docs/support/copyright.md b/docs/support/copyright.md
new file mode 100644
index 0000000..8659948
--- /dev/null
+++ b/docs/support/copyright.md
@@ -0,0 +1,24 @@
+# 版權宣告
+
+此線上教材內容以「[CC-BY 4.0 姓名標示](https://creativecommons.org/licenses/by/4.0/deed.zh-hant){:target="_blank"}」釋出。
+
+建議引用的完整名稱可參考一下範例。
+
+## 組織名稱
+
+- 財團法人開放文化基金會 OCF
+- 開放文化基金會 OCF
+
+## 教材名稱
+
+- Shield of Self-Defense 資安基礎防禦教材, `組織名稱`
+- SSD (ocf.tw) 資安基礎防禦教材, `組織名稱`
+
+## 英文標示
+
+- Shield of Self-Defense, Open Culture Foundation
+- Shield of Self-Defense (ssd.ocf.tw)
+
+## 教材網址
+
+- [https://ssd.ocf.tw](https://ssd.ocf.tw){:target="_blank"}
diff --git a/docs/support/index.md b/docs/support/index.md
new file mode 100644
index 0000000..a64c129
--- /dev/null
+++ b/docs/support/index.md
@@ -0,0 +1,64 @@
+---
+icon: octicons/heart-16
+title: 關懷與諮詢
+---
+
+# :heart:{.heart} 關懷與諮詢
+
+???+ abstract "學習歷程:「關懷與諮詢」"
+
+
+
+ 您目前在「[關懷與諮詢]」,服務導入團隊將定期關懷,並協助提供在專案推進與問題協助。(完整流程:「[章節內容]」、「[操作手冊]」、「[政策制定]」、「[狀態評估]」、「[關懷與諮詢]」)
+
+ [章節內容]: ../chapter/index.md
+ [操作手冊]: ../user_guide/index.md
+ [政策制定]: ../policy/index.md
+ [狀態評估]: ../assessment/index.md
+ [關懷與諮詢]: ../support/index.md
+
+## 意見回饋
+
+對於專案或是課程有任何意見,可以直接透過表單反應給我們作為未來的調整與改善。
+
+[:octicons-mail-16: 意見回饋表](#){ .md-button }
+
+## 諮詢團隊
+
+#### :octicons-shield-check-16: CSCS 公民團體資安暨隱私交流計劃
+
+
+
+**Civil Society Cyber Shield(CSCS)公民團體資安暨隱私交流計劃**,台灣擁有在國際間相當知名的開源社群,亦有著極為活躍但面臨風險的公民社會。為了促進這兩個社群之間的交流,2017 年,開放文化基金會國際交流組與華人民主書院、台灣駭客協會、台灣人權促進會共四個組織共同開啟 CSCS 專案:Civil Society Cyber Shield,讓社會運動與組織者能夠接觸最新的資安工具、對抗資安威脅,在安全的線上環境中推動社會議題。
+
+[:octicons-shield-check-16: CSCS 公民團體資安暨隱私交流計劃](https://cscs.asia/){ .md-button }
+
+#### :octicons-shield-check-16: eQualitie
+
+
+
+[eQualit.ie](https://equalit.ie/) 是一個國際性組織,由來自不同背景的人權倡議夥伴組成,致力於保護和促進基本人權,特別是在網路自由。他們開發開源工具,提供隱私保護、網路安全及資訊管理功能,並以公開透明的方式運作。eQualit.ie 的主要目標是透過技術和教育提升夥伴在數位時代中的安全能力,確保他們能在面對審查、監控和其他威脅時仍能自由表達和取得資訊。組織的核心原則包括重視隱私、提升數位安全、保持公開透明以及捍衛言論自由和公正合法社會。
+
+其中 [Deflect](https://equalit.ie/portfolio/deflect/) 服務協助抵禦分散式阻斷服務(DDoS)攻擊,將站在公民團體所架設的網站最前緣,作為第一線阻擋惡意流量攻擊。
+
+[:octicons-shield-check-16: Deflect NPO 申請方案](https://deflect.ca/non-profits/){ .md-button }
+
+#### :octicons-people-16: 財團法人開放文化基金會 OCF
+
+
+
+財團法人開放文化基金會(Open Culture Foundation, OCF)是一個致力於推動開放科技(開放源碼、開放資料及開放政府)並關注網路自由與數位人權的非營利組織。基金會成立於 2014 年,旨在促進資訊的自由流通促成一個開放、安全、涵融且眾人參與的數位公民社會,並推動社會各界透過開放的方式進行創新和合作、以開放科技和跨界合作來應對數位時代的各項威脅並健全數位社會的發展。
+
+[:octicons-people-16: 開放文化基金會](https://ocf.tw/){ .md-button }
diff --git a/docs/support/resource.md b/docs/support/resource.md
new file mode 100644
index 0000000..86f9225
--- /dev/null
+++ b/docs/support/resource.md
@@ -0,0 +1,54 @@
+---
+icon: material/bookmark-check
+title: 參考資源
+---
+
+# :material-bookmark-check: 參考資源
+
+## 參考資料
+
+### Security in-a-box
+
+
+
+由 [Front Line Defenders](https://www.frontlinedefenders.org/) 提供關於裝置、作業系統相關的操作設定。
+
+[:octicons-shield-check-16: Security in-a-box](https://securityinabox.org/en/){ .md-button }
+
+### Privacy Guides
+
+
+
+Privacy Guides 致力提供個人資料隱私保護的教學內容,網站由志工群協助貢獻內容。
+
+
+[:octicons-shield-check-16: Privacy Guides](https://www.privacyguides.org/){ .md-button }
+
+### Surveillance Self-Defense
+
+
+
+由[電子前哨基金會](https://www.eff.org/)(Electronic Frontier Foundation, eff)發起的專案,提供各項關於網路隱私、規避審查的自我防護抵禦工具與實踐守則。
+
+[:octicons-shield-check-16: Surveillance Self-Defense](https://ssd.eff.org/){ .md-button }
diff --git a/docs/user_guide/abroad.md b/docs/user_guide/abroad.md
new file mode 100644
index 0000000..e2cdcd8
--- /dev/null
+++ b/docs/user_guide/abroad.md
@@ -0,0 +1,86 @@
+---
+icon: material/airplane
+title: 海外出差
+---
+
+# :material-airplane: 海外出差
+
+## 風險評估因素
+
+以下為可以考量的風險評估因素,在進行評估時可以納入建議因素評估可能的狀況。
+
+### **政治風險**
+
+- **政府監控和執法風險**:在一些國家,政府可能會監視或干預公民團體的活動。
+- **社會動盪**:當地可能存在政治示威、暴力衝突或社會動盪,這些事件可能對出差人員造成威脅。
+- **法律制度**:當地法律對公民團體活動的限制可能會使成員面臨法律風險(如被拘留、逮捕、罰款)。
+
+### **安全風險**
+
+- **個人安全**:包括暴力犯罪、綁架、搶劫等威脅。
+- **恐怖襲擊**:某些地區可能存在恐怖主義威脅,增加了公民團體成為目標的風險。
+- **自然災害**:如地震、颱風、洪水等自然災害可能影響行程和安全。
+
+### **健康風險**
+
+- **醫療資源匱乏**:當地的醫療設施和服務可能無法應對突發的健康問題。
+- **傳染病**:當地可能存在傳染病風險,例如新冠病毒、瘧疾、登革熱等。
+- **食品和水質安全**:當地的食品和水可能存在衛生問題,增加食物中毒或感染風險。
+
+### **資訊安全風險**
+
+- **資料隱私**:在外國進行通訊和資料處理時,如何保護機敏資訊和個人隱私。
+- **網絡攻擊**:設備被駭客攻擊或植入惡意軟體的風險。
+- **監控和攔截**:電信監控、Wi-Fi 攔截等方式可能被用來監聽通訊。
+
+### **財務風險**
+
+- **貨幣波動**:當地貨幣大幅波動可能影響預算。
+- **欺詐和腐敗**:可能面臨當地的欺詐行為或強迫支付賄賂。
+
+### **行程風險**
+
+- **交通事故**:當地的道路狀況、交通規則等可能增加交通事故風險。
+- **航班、交通延誤**:航班取消或延誤可能影響行程安排和後續計劃。
+- **旅行文件**:簽證問題、旅遊限制等可能影響到出入境。
+
+### **社會文化風險**
+
+- **文化差異**:當地的文化、宗教和社會習俗不同,可能引發誤解和衝突。
+- **民眾反應**:當地居民對外國公民團體活動的態度如何,是否會引發不滿或敵視。
+
+### **傳遞與通訊風險**
+
+- **通訊不便**:缺乏可靠的通訊手段(如網路不穩定、無法使用手機、網路長城)可能影響訊息傳遞。
+- **資訊落差**:語言障礙和文化差異可能導致資訊誤解或落差。
+
+## 評估表格
+
+可針對「發生的可能性」、「影響程度」快速評估比較不同方案、國家的狀況。
+
+| 風險因素 | 發生可能性 | 影響程度 | 評分 |
+| ------------------ | ---------- | -------- | ---- |
+| 政府監控和執法風險 | 高 | 高 | 9 |
+| 社會動盪 | 中 | 高 | 6 |
+| 自然災害 | 低 | 中 | 2 |
+| 醫療資源匱乏 | 中 | 高 | 6 |
+| 傳染病 | 中 | 高 | 6 |
+| 資料隱私 | 高 | 高 | 9 |
+| 網路攻擊 | 高 | 中 | 6 |
+| 交通事故 | 中 | 中 | 4 |
+| 語言障礙和文化誤解 | 中 | 中 | 4 |
+| 欺詐和腐敗 | 低 | 中 | 2 |
+
+(程度低、中、高分別代表 1, 2, 3,評分通常為「發生可能性」與「影響程度」乘積。)
+
+## 其他章節的操作建議
+
+由於「海外出差」是一個綜合考量的議題,需要此線上教材前項全數課程的搭配,建議在提及相關項目時,可以回顧該章節的操作手冊。
+
+以下章節請勿必再次複習:
+
+1. [裝置安全](./devices/index.md):確認裝置基本的安全防護調整。
+2. [身份驗證](./profile/index.md):密碼管理器使用、2FA 的啟用,或是此趟出差任務是否僅需要使用離線類型的密碼管理器。
+3. [網路使用行為](./network/index.md):如何隱私瀏覽、VPN 建立使用(遇到不能使用 VPN 的國家,其替代的網路連線方式)、Wi-Fi 基本的抵禦作為。
+4. [加密通訊](../chapter/e2ee/index.md):如何使用加密軟體或雲端加密儲存保護重要資料。如果能力允許,如何使用 PGP 加密方式。
+5. [帳號管理](./account/index.md):可考慮暫時停用個人在組織的帳號,避免未知的狀況造成組織帳號被接管或遭強制揭露組織內部資訊。
diff --git a/docs/user_guide/account/index.md b/docs/user_guide/account/index.md
new file mode 100644
index 0000000..1a10eb5
--- /dev/null
+++ b/docs/user_guide/account/index.md
@@ -0,0 +1,18 @@
+---
+icon: material/account-box
+title: 帳號管理
+---
+
+# :material-account-box: 帳號管理
+
+## 帳號權限管理
+
+1. **設定角色與權限**:根據成員的職務分配不同權限,例如僅限特定人員可以存取機敏資料。
+2. **最小權限原則**:只給成員執行其工作所需的最低權限,避免過多授權造成潛在風險。
+3. **定期審查權限**:定期稽核並更新權限,確保不再需要特定權限的成員即時調整。
+
+## 帳號追蹤
+
+1. **活動記錄**:啟用系統的活動追蹤功能,記錄所有帳號的登入、登出及操作行為。
+2. **異常行為監控**:設定異常行為警示,如異地登入或不尋常的資料存取,及時發出警告。
+3. **稽核與報告**:定期審查活動記錄,產生報告以評估系統使用情況,確保無未經授權的活動。
diff --git a/docs/user_guide/account/management.md b/docs/user_guide/account/management.md
new file mode 100644
index 0000000..803b54e
--- /dev/null
+++ b/docs/user_guide/account/management.md
@@ -0,0 +1,37 @@
+---
+title: 帳號權限管理與追蹤
+---
+
+# :material-account-key: 帳號權限管理與追蹤
+
+## 流程簡介
+
+請確保一下項目在組織中都有相對應的處理流程。
+
+1. **最小權限原則**:
+ - 給每個使用者僅限於他們工作所需的最低權限,避免過多的權限導致風險增加。
+ - 定期檢查和更新權限,確保時時符合現階段需求。
+
+2. **多因素驗證**:
+ - 啟用多因素驗證(MFA),如 OTP、Passkey 等,以增加額外的安全程度。
+ - 確保機敏操作(如更改權限)需要更高層級的驗證。
+
+3. **變更管理**:
+ - 每當有修改帳號權限的需求時,必須記錄下來,包括變更的人、變更的內容以及變更的原因。
+ - 需要擁有變更權限的人來進行審核裁示,避免單一人員過多權限集中。
+
+4. **定期稽核**:
+ - 定期稽核帳號權限,確認是否有未經授權的更改或不必要的權限。
+ - 使用自動化工具來幫助進行帳號和權限稽核。
+
+5. **活動日誌記錄**:
+ - 記錄所有帳號操作活動,如登入時間、失敗嘗試、機敏操作等。
+ - 定期檢查這些日誌,尋找是否有可疑的活動。
+
+6. **帳號停用與刪除**:
+ - 當使用者離開組織或權限不再需要時,立刻停用或刪除其帳號。
+ - 維持一份帳號清單,隨時更新離職或變更職位的人員帳號狀態。
+
+7. **教育與訓練**:
+ - 定期教育使用者如何正確管理帳號,特別是強調密碼的強度和安全性。
+ - 提供針對常見資安威脅的訓練,如釣魚攻擊及社交工程。
diff --git a/docs/user_guide/devices/android.md b/docs/user_guide/devices/android.md
new file mode 100644
index 0000000..ce28cc5
--- /dev/null
+++ b/docs/user_guide/devices/android.md
@@ -0,0 +1,113 @@
+---
+title: Android
+---
+
+# :simple-android: Android
+
+Android 系統是由 Google 開發的一個開源行動操作系統,主要用於智慧手機和平板電腦。Android 系統基於 Linux 核心,並設計支援觸控螢幕,提供使用者友好的介面和各種應用程式(App)。該系統經常由不同的製造商定制,以包含各自的使用者界面和應用程式,但核心功能基本一致。
+
+Android 系統普及,開發者可以透過 Google Play 商店或其他平台發佈應用程式。由於其開源的特性,Android 提供廣泛的自訂和開發可能性,但也因此需要在資訊安全上特別注意,以保護個人和組織的資料安全。
+
+## 建議的操作設定
+
+### 更新到最新版本
+
+如同其他作業系統的建議,請檢查使用裝置是否更新到最新的作業系統版本,如果您的裝置已經無法更新到最新的作業系統,建議請汰換到較近生產的裝置。
+
+??? question "如何查看版本"
+
+ - [檢查及更新 Android 版本 - Android 說明](https://support.google.com/android/answer/7680439)
+
+??? tip "Android 支援列表"
+
+ - [Android 版本列表 - 維基百科,自由的百科全書](https://zh.wikipedia.org/wiki/Android%E7%89%88%E6%9C%AC%E5%88%97%E8%A1%A8)
+
+### 受信任的來源下載應用程式
+
+建議在受信任的來源下載 Android 應用程式的原因有以下幾點:
+
+1. **防止惡意軟體**:從受信任的應用商店(如 Google Play 商店)下載應用程式,可以減少下載到惡意軟體的風險。這些應用商店有專門的安全措施和審核機制,可以過濾掉帶有惡意代碼的應用程式。(即使還是有可能下載到惡意程式,但應用商店能遠端移除有問題的應用程式。)
+2. **應用程式安全性更新**:受信任的來源通常會定期推送安全性更新和軟體修補,修正已知漏洞,確保應用程式的安全性。如果從不受信任的來源下載,可能無法獲得及時更新,留下資安隱患。
+3. **維護隱私和數據安全**:受信任的應用商店對應用程式的隱私政策和資料使用進行監控,確保應用程式不會非法收集或濫用用戶的個人信息。在不受信任的來源下載,可能會遭遇到隱私泄露和數據濫用的風險。
+4. **減少兼容性問題**:受信任的應用商店中的應用程式通常經過多方面的測試,保障與不同 Android 裝置的兼容性,從而減少安裝和使用過程中的問題。
+
+!!! success "檢查安全防護"
+
+ - [使用 Google Play 安全防護檢查應用程式和裝置是否出現有害行為。](https://support.google.com/accounts/answer/2812853)
+
+### 應用程式權限
+
+請逐一檢視給予應用程式相關的權限,以下列舉的權限請斟酌應用程式是否必要取得此項目的權限。
+
+??? success "需確認的權限"
+
+ - 位置
+ - 聯絡人
+ - 簡訊
+ - 麥克風
+ - 語音或語音識別
+ - (網路)攝影機
+ - 螢幕錄製
+ - 通話記錄或通話歷史
+ - 電話
+ - 日曆
+ - 電子郵件
+ - 圖片
+ - 電影或影片及其資料庫
+ - 指紋識別器
+ - 近距離無線通訊(NFC)
+ - 藍牙
+ - 任何包含「磁碟存取」、「檔案」、「文件夾」或「系統」的設定
+ - 任何包含「安裝」的設定
+ - 人臉識別
+ - 允許下載其他應用程式
+
+!!! question "變更應用程式權限"
+
+ - 如何變更權限,請參考「[在 Android 手機上變更應用程式權限](https://support.google.com/android/answer/9431959?hl=zh-Hant)」。
+
+### 移除無用的應用程式
+
+逐一檢視少用與無用的應用程式,如何操作可以參考「[刪除、停用及管理 Android 上未使用的應用程式](https://support.google.com/googleplay/topic/13627086?hl=zh-Hant)」。
+
+### 定位資訊
+
+關閉定位資訊與移除歷史定位資訊,請衡量安全性與便利性,建議在處理到工作事務使用嚴格的設定。如何調整可以參考說明:
+
+- [管理 Android 裝置的位置資訊設定](https://support.google.com/android/answer/3467281)
+- [管理定位記錄](https://support.google.com/android/answer/3118687)
+
+### 帳號管理
+
+確認帳號權限目前屬於管理者的角色只有您才可以登入、一般權限的使用者不能過度授權存取。並養成習慣平時使用**一般授權帳號**操作,只有在需要管理者權限時變更系統設定時**才切換為管理者**。
+
+!!! question "變更使用者"
+
+ - 如何[刪除、切換或新增使用者](https://support.google.com/android/answer/2865483)
+
+### 螢幕鎖定
+
+設定螢幕閒置時間後、進行螢幕鎖定,建議使用「**密碼**」類型設定,避免使用容易遭窺視的「**解鎖圖案**」。
+
+!!! question "設定螢幕鎖定"
+
+ - 如何[在 Android 裝置上設定螢幕鎖定功能](https://support.google.com/android/answer/9079129)
+
+### 語音控制
+
+關閉 Google 助理語音控制,請逐步檢查設定:
+
+!!! success "關閉語音控制"
+
+ 1. 開啟 Google 應用程式
+ 2. 點擊你的頭像
+ 3. 點擊設定
+ 4. 點擊 Google 語音助理
+ 5. 點擊一般
+ 6. 關閉 Google 語音助理
+
+ :material-account-question: 其他關於語音助理的設定調整,請參考「[透過語音指令使用 Google 助理](https://support.google.com/assistant/answer/7394306?hl=zh-Hant)」。
+
+## 參考資料
+
+- [Android Security and Update Bulletins | Android Open Source Project](https://source.android.com/docs/security/bulletin)
diff --git a/docs/user_guide/devices/index.md b/docs/user_guide/devices/index.md
new file mode 100644
index 0000000..881adad
--- /dev/null
+++ b/docs/user_guide/devices/index.md
@@ -0,0 +1,52 @@
+---
+icon: octicons/devices-24
+title: 裝置安全
+---
+# :octicons-devices-24: 裝置安全
+
+本章節會針對基本的安全情境逐步調整裝置設定到符合的基本規範,不論是透過物理或軟體的設定,也會針對不同作業系統分別引導裝置設定。
+
+!!! abstract "閱讀說明"
+
+ - 本章節所提及的「裝置」為個人或是組織提供的電腦、筆記型電腦、行動裝置、平板電腦 ... 等設備。
+ - 以下內容適用於所有裝置,個別的裝置類型可以再依子分類查閱詳細的操作方式。
+ - :material-cellphone-information: [iOS]、:material-microsoft-windows: [Windows]、:material-apple-finder: [macOS]、:simple-android: [Android]。
+ [iOS]: ./ios.md
+ [Windows]: ./windows.md
+ [macOS]: ./macOS.md
+ [Android]: ./android.md
+
+## 螢幕防窺片
+
+防窺片原理就是採用物理光學的「偏光」而成,防窺片中的防窺層設計為間格細小的紋理,可稱為類似「光柵」,類似掛在窗上的百葉窗,一片片葉片集中單一方向的光源,因此在左右兩側角度範圍外將無法呈現螢幕上的內容,因而達到防窺視的效果。
+
+防窺片為什麼重要且需要,因於目前大部分開放型辦公室配置、透過大眾運輸系統通勤或在咖啡店工作關係,在某些時刻會有不特定人士與彼此距離非常靠近的情況,避免有心人士持續窺視取得重要資訊,建議可以考慮使用螢幕防窺片來防護。
+
+### 如何挑選螢幕防窺片
+
+選購條件:
+
+1. 防窺可視角度:角度越小越好,目前常見為左右各 30 度(可視範圍在 60 度)
+2. 透光度:不低於 80% 避免亮度不足增加眼睛負擔。
+
+其他如防藍光、霧面或亮面、抗污等功能可依自行需求選購。
+
+## 視訊鏡頭蓋
+
+可覆蓋在筆記型電腦或平板的前置攝影鏡頭上,防止鏡頭在非預期的情況開啟或進行監視行為。
+
+### 如何取得
+
+一般網路商場都有販售,或是參與研討會部分攤位紀念品也可能會有。最簡單、陽春的作法可以使用便利貼剪下一小塊直接黏貼於裝置鏡頭即可。
+
+## USB 阻塞鎖
+
+需要特殊工具才可移除的 USB、Type-C 規格的阻塞鎖,可以避免未使用狀態時,透過 USB 裝置孔洞置入破壞竊壯志設備。
+
+## 安全標籤和封條
+
+在設備上黏貼安全標籤或使用封條,一旦損毀,能讓你立即察覺到設備是否被不正常程序操作。
+
+!!! danger "TODO: 補圖片"
+
+ 之後要補圖片。
diff --git a/docs/user_guide/devices/ios.md b/docs/user_guide/devices/ios.md
new file mode 100644
index 0000000..32d8129
--- /dev/null
+++ b/docs/user_guide/devices/ios.md
@@ -0,0 +1,170 @@
+---
+title: iOS 裝置設定
+---
+
+# :material-cellphone-information: iOS 裝置設定
+
+本章節針對 iPhone(iOS)、iPad(iPadOS)產品的作業系統。如果您使用 Apple 的裝置,可以透過停用一些功能來強化系統內建與隱私或安全設定來增強保護。
+
+!!! question "Apple 的隱私表現"
+
+ Apple 裝置通常因其出色的資料保護功能而受到青睞,也較符合現代的安全最佳做法。但是,Apple 的系統有時候過於封閉,這可能在某些方面限制了隱私。iOS、iPadOS 在隱私和安全保護上比大多數普通 Android 裝置表現好。但如果你不想依賴 Apple 或 Google 的服務,選擇一個自定義的 Android 系統,比如 [GrapheneOS](https://grapheneos.org/),能提供更高階的隱私保護,但這比較屬於進階的操作!
+
+## 建議的操作設定
+
+### iCloud
+
+Apple 服務中最具隱私安全爭議的服務即為 iCloud,當您使用 Apple 服務時,與您有關的資訊都將儲存在 Apple 的資料中心。您可以透過[文件](https://support.apple.com/zh-tw/102651)查看哪些服務是所謂具備**端到端加密**是在「傳輸過程中」或是「儲存在伺服器中」,且 Apple 承諾沒有你的允許是不會存取您的資料。當然,有時也會屈服於法律的規定,直接透過伺服器提供資訊給相關單位,也無可避免 Appple 服務也可能發生資料外洩的疑慮。
+
+因此,如果您充分衡量後確定使用 iCloud,也請開啟「[iCloud 進階資料保護](https://support.apple.com/zh-tw/108756)」
+
+!!! note "資料保護模式"
+
+ Apple 針對帳號提供兩種不同程度的資料保護模式:「標準資料保護」、「iCloud 進階資料保護」,以上兩種方式差異在於各服務是否有**端到端加密**且**加密金鑰**是否儲存在您的裝置中。相關的說明可以參考以下說明文件:
+
+ - [如何開啟「iCloud 進階資料保護」](https://support.apple.com/zh-tw/108756)
+ - [iCloud 資料安全性概覽](https://support.apple.com/zh-tw/102651)
+
+#### iCloud+
+
+如果您有訂購 iCloud+,有兩項服務也可以使用,雖然 Apple 提供的這兩項服務都僅僅是很基礎款抵禦隱私的功能,但已付費了,就請記得開啟使用。
+
+**iCloud 私密轉送**:這是可以在您使用 safari 瀏覽網頁時,第一段的連線先連結到 Apple 提供的服務主機,再由 Apple 專送到第二台主機連線到目的地網站,這樣效果是目的地網站不能確切知道您實際的連線 IP 位置。
+
+!!! note "與 Tor 不同的地方"
+
+ Tor 網路是透過三台主機轉送的方式達到無法朔原,且「iCloud 私密轉送」只有透過 safari 與「郵件」其功能才可使用。詳細的說明與解釋可以參考:
+
+ - [關於「iCloud 私密轉送」](https://support.apple.com/zh-tw/102602)
+
+**隱藏我的電子郵件**:透過產生隨機的電子郵件信箱,可用於應用程式登入註冊、填寫聯絡方式時使用,Apple 將轉寄到您真正的信箱中。但請記得,這裡僅僅提供電子郵件信箱轉寄的服務,關於電子郵件內容的保密與加密方式並不屬於此服務可以支援的功能。
+
+!!! info "說明"
+
+ 相關的說明可參考:[什麼是「隱藏我的電子郵件」?](https://support.apple.com/zh-tw/105078)
+
+#### 媒體與購買項目
+
+!!! success "操作項目"
+
+ - [ ] **關閉**「個人化推薦」
+
+ 在**設定**項目中、點選進入 **Apple ID**(在設定第一個附有頭像與名稱的項目),找到「**媒體與購買項目**」點入後選擇「**檢視帳號**」。接下來找到「**個人化推薦**」將其關閉,可以降低暴露過多的使用習慣。
+
+### 設定
+
+#### Wi-Fi
+
+!!! success "操作項目"
+
+ - [x] 開啟**專用 Wi-Fi 位址**
+
+ 設定、Wi-Fi 設定頁面、點擊已連線的 Wi-Fi 後 :octicons-info-24: 圖示設定,確認開啟「**專用 Wi-Fi 位址**」。
+
+ 未開啟前,任何裝置連線到 Wi-Fi 都會有一組裝置唯一識別號碼,因此很容易透過連線紀錄追蹤定位。開啟後會針對每一個連線裝置產生一組新的識別碼,避免跨 Wi-Fi 裝置的追蹤。
+
+#### 藍牙(Bluetooth)
+
+!!! success "操作項目"
+
+ - [ ] **關閉**藍牙連線
+
+ 藍牙連線在不使用時請關閉。關閉的方式請透過「設定」、「藍牙」頁面完全關閉。不要透過下拉控制中心的藍牙圖示關閉。如果因為其他裝置連線,也請將藍牙點擊調整為灰白狀態(不接受新連線)。
+
+#### 一般
+
+!!! success "在「一般」選單中的操作項目"
+
+ === ":material-numeric-1-circle-outline: 關於本機"
+
+ 在「關於本機」中的「名稱」預設會呈現您的名字,如需匿名於陌生環境,建議直接改為 **iPhone** 達到匿名性。
+
+ === ":material-numeric-2-circle-outline: 軟體更新"
+
+ 請在「自動更新」中開啟以下設定
+
+ 在「自動安裝」區塊
+
+ - [x] iOS 更新項目
+ - [x] 安全回應與系統檔案
+
+ 在「自動下載」區塊
+
+ - [x] iOS 更新項目
+
+ === ":material-numeric-3-circle-outline: AirDrop"
+
+ - [ ] **關閉** AirDrop
+
+ 平時不使用狀態請常時關閉 AirDrop 功能。請在「設定」、「一般」、「關閉接收」頁面完全關閉。
+
+ === ":material-numeric-4-circle-outline: AirPlay 與接力"
+
+ - [ ] **關閉**「自動 AirPlay」
+
+ === ":material-numeric-5-circle-outline: 背景 App 重新整理"
+
+ - [ ] **關閉**不需要的 App 執行背景重新整理
+
+ 請逐一檢視不常使用或非必要的 App 能允許執行背景重新整理,如果不是即時且重要的資訊,通常不需要背景處理,在 App 使用時執行就已足夠。
+
+#### Siri 與搜尋
+
+!!! success "操作項目"
+
+ - [ ] **關閉**鎖定時允許 Siri
+
+ 在螢幕鎖定時也請停用 Siri,避免其他人喚起 Siri 取得手機的控制權。
+
+#### FaceID/TouchID 與密碼
+
+!!! success "「自訂英數密碼」操作項目"
+
+ 選擇「開啟密碼」或「更改密碼」,如果選擇「更改密碼」,會先需要輸入既有密碼才可以繼續。下方有「密碼選項」點開,**建議使用「自訂英數密碼」**。
+
+在某些安全建議關閉使用 FaceID 或 TouchID,請衡量安全與便利性。可以 FaceID、TouchID 與密碼輸入都開啟,在無法使用 FaceID 或 TouchID 時可以改用密碼輸入方式使用裝置。
+
+由於預設使用 FaceID 或 TouchID,在某些危急的情況下,可以透過長按**電源鍵**與**任一音量**按鈕約3秒後,可強制轉為**密碼輸入**模式使用。
+
+!!! success "「遭竊裝置防護」操作項目"
+
+ - [x] **開啟**遭竊裝置防護
+
+ **遭竊裝置防護**是 iOS 17.3 之後的新功能,可以減緩裝置被竊取後、解開螢幕後能關閉或更改許多防護設定,建議將其功能開啟。
+
+!!! success "「鎖定時允許取用」操作項目"
+
+ 以下項目建議逐一關閉,衡量安全與便利性可斟酌調整。
+
+ - [ ] **關閉**今天概覽和搜尋
+ - [ ] **關閉**通知中心
+ - [ ] **關閉**控制中心
+ - [ ] **關閉**鎖定畫面小工具
+ - [ ] **關閉** Siri
+ - [ ] **關閉**用訊息回覆
+ - [ ] **關閉**家庭控制
+ - [ ] **關閉**錢包
+ - [ ] **關閉**回撥未接來電
+ - [ ] **關閉**配件
+
+!!! danger "「清除資料」操作項目"
+
+ 預設為輸入 10 次錯誤密碼後會清除裝置上的所有資料,此功能具有毀滅不可逆的操作,建議可以將此項設定在會出入危急場域或單一用途裝置上,並也有充分的備份機制。
+
+#### 隱私與安全性
+
+!!! success "「定位服務」操作項目"
+
+ 點入後逐一檢視目前所有的 App 是否有必要給予「**永遠**」使用定位的權限,建議都調整為「**使用期間**」或是「**下次詢問或在我分享時**」,如很明確不需要使用定位服務,請將其調整為「**永不**」。
+
+!!! success "「追蹤」操作項目"
+
+ - [ ] **關閉**允許 App 發出追蹤請求
+
+!!! success "「分析與改進功能」操作項目"
+
+ 關閉所有分析與改進或回傳報告項目。
+
+!!! danger "「封閉模式」操作項目"
+
+ 「**封閉模式**」可為裝置提供極端的保護措施,但請注意,某些 App 在此模式下可能無法使用,啟用後請衡量評估其可用性。
diff --git a/docs/user_guide/devices/macOS.md b/docs/user_guide/devices/macOS.md
new file mode 100644
index 0000000..8e1085d
--- /dev/null
+++ b/docs/user_guide/devices/macOS.md
@@ -0,0 +1,99 @@
+---
+title: MacOS
+---
+
+# :material-apple-finder: MacOS
+
+當今的數位時代,資訊安全對於每一個公民團體來說都是至關重要的,而 MacOS 作為 Apple 開發的作業系統,以其安全性和穩定性而聞名。然而,即便在強大的 MacOS 環境下,我們仍需要採取積極的安全措施來保護機敏資料。這一章節將提供一系列有關 MacOS 資訊安全的操作設定與建議。
+
+## 建議的操作設定
+
+### 系統設定
+
+以下設定在「系統設定」頁操作。
+
+#### 藍牙(Bluetooth)
+
+!!! success ""
+
+ - [ ] **關閉**藍牙連線
+
+藍牙連線在不使用時請關閉。關閉的方式請透過「系統設定」、「藍牙」頁面完全關閉。
+
+#### 網路
+
+!!! success ""
+
+ - [x] **開啟**「限制 IP 位置追蹤」。
+
+依目前連線的模式「Wi-Fi」或「網路」,在已連線的項目後方點擊「**詳細資訊⋯**」,開啟「**限制 IP 位置追蹤**」。
+
+#### 防火牆
+
+!!! success ""
+
+ - [x] **開啟**防火牆
+ - [x] **開啟**阻擋所有傳入連線
+
+在「設定」頁面,點擊「網路」、「防火牆」並啟用。在「防火牆」下方的「**選項⋯**」開啟後設定較進階的防護,建議可以啟用「**阻擋所有傳入連線**」。
+
+#### 一般
+
+**修改裝置名稱**:在、「關於」、「名稱」。在預設情況下會揭露登入帳號名稱,建議修改成**通用型名稱**,如:Mac。
+
+**軟體更新**:在「軟體更新」中點擊「自動更新」後方圖示 :octicons-info-16: 開啟詳細設定。以下項目建議開啟:
+
+!!! success ""
+
+ - [x] 檢查更新項目
+ - [x] 可用時下載新的更新項目
+ - [x] 安裝 macOS 更新項目
+ - [x] 從 App Store 安裝應用程式更新項目
+ - [x] 安裝安全回應和系統檔案
+
+#### 隱私權與安全性
+
+請逐一確認以下項目設定狀態。
+
+!!! info ""
+
+ - **定位服務**:可以直接關閉定位功能,或是逐一檢視應用程式是否需要「**定位服務**」。
+ - **分析與改進功能**:關閉、停用此頁所有的分析項目。
+ - **Apple 廣告**:關閉、停用「**個人化廣告**」。
+ - **檔案保險箱**:此功能為磁碟加密,開啟後需要登入密碼或復原密碼來讀取資料,因此**請記得提升登入密碼強度**。
+ - **封閉模式**:此功能為極端保護模式,建議啟用後評估是否影響日常工作流程。
+ - **進階⋯**:在頁面下方的「**進階⋯**」按鈕點開後,啟用「**需要管理者密碼才能取用系統層面的設定**」。
+
+## :warning: 進階的操作設定
+
+!!! warning "閱讀說明"
+
+ 以下操作**技術成份較高**,需要有一定的**相關背景認知**比較不會有意料之外、所造成錯誤的風險。如果您想要進一步瞭解,也想要學習與挑戰,在以下內容將伴隨較初階的內容補充,協助您提升高階抵禦技能。
+
+### 隨機產生 MAC 位址
+
+由於 :material-apple-finder: macOS 不像 :material-cellphone-information: iOS 可以針對不同的 Wi-Fi 連線時、各自產生隨機的 MAC 位址,且 :material-apple-finder: macOS 網路介面也沒有提供任何選項使用,因此目前在 :material-apple-finder: macOS 作業系統環境中,每次連線到不同的 Wi-Fi 時,**都會顯示相同的 MAC 位址,因而產生唯一識別、容易造成有心人士的追蹤與鎖定**。
+
+??? question "什麼是「MAC 位址(MAC Address)」?"
+
+ MAC 位址(Media Access Control Address)是一個網路硬體設備的唯一識別碼,用來標識網路介面卡(NIC)。每個網路設備的 MAC 位址都是唯一的,它由製造商在硬體生成時寫入設備中,不會重複。MAC 位址通常由 48 位元(6 個字節)組成,以十六進位表示,並以冒號或連字號分隔,如「00:1A:2B:3C:4D:5E」。
+
+在開始設定隨機 MAC 位址時,請先與目前連線的 Wi-Fi 設備斷線,之後開啟「終端機」輸入以下指令。
+
+``` zsh
+openssl rand -hex 6 | sed 's/^\(.\{1\}\)./\12/; s/\(..\)/\1:/g; s/.$//' | xargs sudo ifconfig en0 ether
+```
+
+無任何的錯誤訊息顯示代表設定成功。可透過 `ifconfig en0` 查詢新的 MAC 位址。(或是在執行指令前先 `ifconfig en0` 取得舊的 MAC 位址來比較其更新的差異。)
+
+**每次重開機後,MAC 位址都會恢復的原始的設定,請記得再次執行以上的指令**,或頻繁且刻意的更新 MAC 位址。
+
+??? question "如何開啟「終端機」?"
+
+ - [在 Mac 上打開或結束「終端機」 - Apple 支援](https://support.apple.com/zh-tw/guide/terminal/apd5265185d-f365-44cb-8b09-71a064a42125/mac)
+
+## 參考資料
+
+- [Apple 平台安全性 - Apple 支援](https://support.apple.com/zh-tw/guide/security/welcome/web)
+- [macOS Overview - Privacy Guides](https://www.privacyguides.org/en/os/macos-overview/)
+- [Protect your MacOS device - security in-a-box](https://securityinabox.org/en/phones-and-computers/mac/)
diff --git a/docs/user_guide/devices/windows.md b/docs/user_guide/devices/windows.md
new file mode 100644
index 0000000..c8598c5
--- /dev/null
+++ b/docs/user_guide/devices/windows.md
@@ -0,0 +1,120 @@
+---
+title: Windows 系統
+---
+
+# :material-microsoft-windows: Windows 系統
+
+Windows 系統是由微軟公司開發的操作系統系列,使用廣泛,涵蓋 PC、筆記型電腦、平板電腦及伺服器等多種設備。Windows 系統以其圖形化用戶界面和廣泛的應用軟體支持而聞名。
+
+## 版本更新
+
+目前最新的版本為 Windows 11,於 2021 年發布。Windows 7、Windows 8 版本以於 2023 年 1 月 10 日結束維護與安全更新。如果您的作業系統不為 **Windows 10 或之後的版本**,請儘速更新到最新的系統版本。
+
+??? question "如何確認我所使用的 Windows 版本號為何?"
+
+ 請按 ++windows+r++ 在**開啟**中輸入 **winver**,按下**確定**即可。其他的操作方式可以參考說明文件:
+
+ - [我正在執行哪個版本的 Windows 作業系統? - Microsoft 支援服務](https://support.microsoft.com/zh-tw/windows/%E6%88%91%E6%AD%A3%E5%9C%A8%E5%9F%B7%E8%A1%8C%E5%93%AA%E5%80%8B%E7%89%88%E6%9C%AC%E7%9A%84-windows-%E4%BD%9C%E6%A5%AD%E7%B3%BB%E7%B5%B1-628bec99-476a-2c13-5296-9dd081cdd808)
+
+??? question "如何開始更新作業系統?"
+
+ 由於 Windows 10、Windows 11 的操作方式不同,可以參考官方的說明文件來完成更新作業。
+
+ - [Windows Update:常見問題集 - Microsoft 支援服務](https://support.microsoft.com/zh-tw/windows/windows-update-%E5%B8%B8%E8%A6%8B%E5%95%8F%E9%A1%8C%E9%9B%86-8a903416-6f45-0718-f5c7-375e92dddeb2#WindowsVersion=Windows_11)
+
+??? info "Windows 版本更新公告"
+
+ 詳細的版本更新說明,可以參考微軟臺灣公告:
+
+ - [終止支援 Windows 10、Windows 8.1 和 Windows 7 | Microsoft Windows](https://www.microsoft.com/zh-tw/windows/end-of-support)
+
+## 我的位置活動
+
+- 請**關閉或停用**關於定位位置活動,按下「開始:simple-windows10:」、「設定」、「隱私權、位置」,**清除**已儲存在裝置上的定位資料。
+- 檢查應用程式或裝置要求存取我的位置:「設定」、「隱私權」、「位置」。
+- 關閉尋找我的裝置:「設定」、「更新與安全性」、「尋找我的裝置」或「尋找我的電話」
+
+??? info "參考資料"
+
+ 其他詳細的參考文件:
+
+ - [隱私權儀表板上的位置活動 - Microsoft 支援服務](https://support.microsoft.com/zh-tw/windows/%E9%9A%B1%E7%A7%81%E6%AC%8A%E5%84%80%E8%A1%A8%E6%9D%BF%E4%B8%8A%E7%9A%84%E4%BD%8D%E7%BD%AE%E6%B4%BB%E5%8B%95-cb8cde37-2569-1ca9-f011-2d07554912e8)
+
+## 應用程式權限
+
+請逐一檢視給予應用程式相關的權限,以下列舉的權限請斟酌應用程式是否必要取得此項目的權限。
+
+- Windows 10:「開始」、「設定」、「隱私」
+- Windows 11:「開始」、「設定」、「隱私與安全」
+
+??? success "需確認的權限"
+
+ 以下權限名稱可能因為翻譯問題些為差異,請核對功能是否正確。
+
+ - 帳戶資訊:存取您的任何帳戶資訊。
+ - 允許提升權限:允許應用程式在不提示使用者的情況下以管理員特權執行。
+ - 應用診斷:取得其他執行中的應用程式的診斷資訊。
+ - 藍牙:啟用並使用您的設備與其他設備之間的任何藍牙連接。
+ - 日曆:存取您的日曆。
+ - 通話歷史記錄:存取您在設備上、Skype 或其他電話應用程式中進行的通話歷史記錄。
+ - 聯絡人:存取您的聯絡人、通訊錄應用程式。
+ - 自定義安裝操作:安裝額外的軟體。
+ - 電子郵件:存取您的電子郵件和電子郵件帳戶的帳戶資訊。
+ - 人臉識別:啟用並使用任何人臉識別硬體。
+ - 文件系統:存取您有權限訪問的檔案和資料夾,並讀取或寫入所有檔案(包括文件、照片和音樂)。
+ - 指紋讀取器:啟用並使用任何指紋讀取器硬體。
+ - 本地系統服務:在機器上安裝一個具有最高權限的服務。
+ - 位置:啟用並使用設備上的 GPS 或其他位置查找功能。存取地圖和其他位置應用程式中的位置數據。
+ - 訊息:存取您的即時訊息和帳戶資訊。
+ - 麥克風:啟用並使用設備上的麥克風。
+ - 可修改的應用程式:使使用者能夠修改應用程式。
+ - 近距離無線通訊:啟用並使用設備與其他設備之間的任何近距離無線通訊(NFC)連接。
+ - 通知:存取位於操作中心的通知。
+ - 圖片庫:存取設備中圖片庫的任何圖片檔案。
+ - 任務:存取 Outlook 和其他任務跟踪應用程式中的任務列表。
+ - 影片庫:存取設備中影片庫的任何影片檔案。
+ - 語音識別:啟用並使用任何語音識別硬體。
+ - 網路攝影機:啟用並使用設備上的攝像頭。
+ - Wi-Fi:啟用並使用設備、網路和其他設備之間的 Wi-Fi 連接。
+ - 有線連接:啟用並使用包括乙太網、USB 和串行通信在內的任何有線連接,以實現設備、網路和其他設備之間的連接。
+
+??? info "參考資料"
+
+ 其他詳細的參考文件:
+
+ - [App 權限 - Microsoft 支援服務](https://support.microsoft.com/zh-tw/windows/app-%E6%AC%8A%E9%99%90-aea98a7c-b61a-1930-6ed0-47f0ed2ee15c)
+
+## 移除無用的應用程式
+
+逐一檢視少用與無用的應用程式,如何操作可以參考「[在 Windows 中卸載或移除應用程式和程式 - Microsoft 支援服務](https://support.microsoft.com/zh-tw/windows/%E5%9C%A8-windows-%E4%B8%AD%E5%8D%B8%E8%BC%89%E6%88%96%E7%A7%BB%E9%99%A4%E6%87%89%E7%94%A8%E7%A8%8B%E5%BC%8F%E5%92%8C%E7%A8%8B%E5%BC%8F-4b55f974-2cc6-2d2b-d092-5905080eaf98)」
+
+## 設定螢幕保護裝置
+
+螢幕保護裝置需搭配密碼一起設定,請先設定螢幕保護裝置:「開始」、「設定」、「個人化」、「鎖定畫面」、「螢幕保護程式設定」。等候可設定 3 - 5 分鐘,並勾選 **:white_check_mark: 繼續執行後,顯示登入畫面**。
+
+密碼設定或更新:「開始」、「設定」、「帳戶」、「登入選項」,在選項中確認密碼啟用。
+
+!!! tips "鎖定您的裝置"
+
+ 如果要即刻暫時離開,可以直接按下 ++windows+l++ 鎖定螢幕。
+
+??? info "參考資料"
+
+ 其他詳細的參考文件:
+
+ - [變更您的螢幕保護裝置設定 - Microsoft 支援服務](https://support.microsoft.com/zh-tw/windows/%E8%AE%8A%E6%9B%B4%E6%82%A8%E7%9A%84%E8%9E%A2%E5%B9%95%E4%BF%9D%E8%AD%B7%E8%A3%9D%E7%BD%AE%E8%A8%AD%E5%AE%9A-a9dc2a0c-dc8e-9161-d270-aaccc252082a)
+ - [Windows 登入選項和帳戶保護 - Microsoft 支援服務](https://support.microsoft.com/zh-tw/windows/windows-%E7%99%BB%E5%85%A5%E9%81%B8%E9%A0%85%E5%92%8C%E5%B8%B3%E6%88%B6%E4%BF%9D%E8%AD%B7-7b34d4cf-794f-f6bd-ddcc-e73cdf1a6fbf#WindowsVersion=Windows_11)
+
+## 防火牆
+
+開啟內建的 Microsoft Defender 防火牆服務:
+
+1. 「開始」、「設定」、「隱私權與安全性」、「Windows 安全性」、「防火牆與網路保護」。
+2. 選取網路設定檔:「網域網路」、「私人網路」或「公用網路」。
+3. 將防火牆設定為開啟。
+
+??? info "參考資料"
+
+ 其他詳細的參考文件:
+
+ - [開啟或關閉 Microsoft Defender 防火牆 - Microsoft 支援服務](https://support.microsoft.com/zh-tw/windows/%E9%96%8B%E5%95%9F%E6%88%96%E9%97%9C%E9%96%89-microsoft-defender-%E9%98%B2%E7%81%AB%E7%89%86-ec0844f7-aebd-0583-67fe-601ecf5d774f)
diff --git a/docs/user_guide/files_management/backup_archive.md b/docs/user_guide/files_management/backup_archive.md
new file mode 100644
index 0000000..ba76a60
--- /dev/null
+++ b/docs/user_guide/files_management/backup_archive.md
@@ -0,0 +1,127 @@
+---
+title: 資料備份與封存
+---
+
+# :material-archive-lock: 資料備份與封存
+
+以下是關於規劃辦公室內的 NAS(網路儲存設備)備份設施的詳細操作手冊,包括不斷電設備、外網連入方式以及整合 [Tailscale](https://tailscale.com/) 的規劃範本:
+
+## 1. 選擇和設定 NAS
+
+### 選擇合適的 NAS 設備
+
+- 確認 NAS 機器具備足夠的儲存容量,足以容納公民團體所需的所有檔案和數據備份。
+- 選擇具有 RAID 功能的 NAS 以增加資料安全性。
+
+### 選購硬碟
+
+1. **RAID 配置**:選購容量合適且可靠的硬碟,並設定 RAID 1、RAID 5 或 RAID 6 來提供數據資料冗餘,提高數據資料安全性。
+
+ ??? tip "什麼是 RAID 1、RAID 5、RAID 6"
+
+ RAID 磁碟陣列是一種把多個硬碟合併起來運作的方法,可以讓資料存取速度更快,或是讓資料更安全。簡單來說,就是把多顆硬碟當成一個來用,好處很多。
+
+ 1. **RAID 1(鏡像)**:
+
+ - **簡單說明**:RAID 1 是將資料數據複製到兩個硬碟上,確保一個硬碟損壞時,資料數據仍然完好無損地存在於另一個硬碟。
+ - **優點**:高資料數據保護,讀取速度可能增加。
+ - **缺點**:只利用一半的儲存容量。例如:兩個 1TB 的硬碟,只能存 1TB 的資料。
+
+ 2. **RAID 5(分散奇偶校驗)**:
+
+ - **簡單說明**:RAID 5 將資料數據和奇偶校驗資料分散存儲在至少三個硬碟上。即使其中一個硬碟損壞,資料也能透過奇偶校驗重建出來。
+ - **優點**:資料保護好,讀取速度快,儲存利用率較 RAID 1 高。
+ - **缺點**:寫入速度較慢,且需要至少三個硬碟。
+
+ 3. **RAID 6(雙奇偶校驗)**:
+
+ - **簡單說明**:RAID 6 類似 RAID 5,但多了一層保護,使用雙重奇偶校驗。即使有兩個硬碟同時損壞,資料數據依然可以恢復。
+ - **優點**:資料保護更強(可容忍兩個硬碟故障),讀取速度快。
+ - **缺點**:寫入速度比較慢,需要至少四個硬碟,儲存利用率比 RAID 5 低一些。
+
+ **結論**:
+
+ - **RAID 1** 適合對資料安全要求高,但儲存容量需求不大的情況。
+ - **RAID 5** 適合平衡效能、儲存利用率和資料安全。
+ - **RAID 6** 適合需要更高資料安全性,能容忍多個硬碟失效的情況。
+
+2. **硬碟品牌推薦**:選用傳統轉盤印碟,不要使用固態硬碟(SSD),如 Seagate、WD,以提高耐用性。
+
+ ??? warning "不要選擇同一品牌或同一時間生產的硬碟?"
+
+ 在選購 NAS 硬碟時,我們會建議不要選擇同一品牌或同一時間生產的硬碟。這是因為:
+
+ 1. **同一品牌或同一批次的硬碟容易同時故障**:如果這些硬碟是同一品牌或同一生產批次,那麼他們內部的部件和技術可能是相同的,也就是說,他們可能有類似的使用壽命和故障風險。這樣一來,當其中一顆硬碟出現問題時,其他的硬碟也有可能會在差不多的時間內出現問題,造成資料同時無法讀取或損失。
+
+ 2. **異常風險分散**:選擇不同品牌、不同生產時期的硬碟,可以有效地分散風險。這就像是把雞蛋放在不同的籃子裡,一顆硬碟壞了,其他硬碟還是正常運作,資料比較不容易全部丟失。
+
+## 2. 選購不斷電系統 (UPS)
+
+1. **容量計算**:計算辦公室內需要接入 UPS 的設備(如伺服器、NAS、路由器等)的總功率,選擇一個能夠支撐總功率的 UPS,以防電力中斷。。
+2. **品牌選擇**:推薦 APC、CyberPower 等知名品牌的 UPS 系統,以穩定電力供應。
+
+## 3. 安裝和設定 NAS
+
+1. **安裝硬碟**:依照 NAS 的說明書將硬碟安裝到 NAS 裝置中。
+2. **連接到網路**:
+ - 使用乙太網路線將 NAS 連接到辦公室的路由器或交換器。
+ - 開啟 NAS,並通過網路上找到 NAS 的 IP 位址。
+3. **初始化設置**:
+ - 使用 NAS 供應商提供的管理軟體,完成初始設置,如建立管理員帳號。
+ - 設定 RAID,以確保資料冗餘和安全。
+
+## 4. 安裝不斷電系統(UPS)
+
+1. **安裝 UPS**:將 UPS 放置在辦公室靠近 NAS 及其他較重要設備的位置。
+2. **連接設備**:
+ - 將 NAS、路由器和其他重要設備插入 UPS 的插座。
+ - 確保 UPS 的操作和監控軟體安裝在 NAS 或其他連接的電腦上,以監控電力狀況。
+
+??? warning "常見的忽略"
+
+ - 安裝好 UPS 後,請檢查是否有將「電量通知訊號線」連接回 NAS。當停電時供電來自於 UPS,如未在時間內復電而 UPS 電量將耗盡時、才有能力通知 NAS 進入到正常的關機程序,保護硬碟運作。
+
+## 5. 網路設置與外網連入
+
+!!! danger ""
+
+ 建議衡量組織可承受之風險與網路設備掌握程度,建立對外網路連線存在一定的高度風險。
+
+1. **內部 IP 設定**:給 NAS 設備分配固定的內部 IP 位址,確保穩定連接。
+2. **路由器設定**:在辦公室的路由器上設定端口轉發(Port Forwarding),將外部連接對映到 NAS 設備的內部 IP 上。
+3. **DDNS 設定**:使用動態域名服務(DDNS),這樣組織成員不用每次更換變動的 IP 位址,推薦使用 NAS 設備商提供的 DDNS 服務。
+
+## 6. 設定備份與安全性
+
+1. **用戶與權限**:
+ - 根據成員的角色與需求,在 NAS 上設置不同的用戶帳號與權限。
+ - 確保只授權必要的連線與存取權限,以減少安全風險。
+
+2. **資料備份計畫**:
+ - 擬定定期備份計畫,如每日、每週或每月自動備份重要資料數據。
+ - 檢查備份報告,確保備份成功進行。
+
+## 7. 遠端訪問與安全設置
+
+1. **VPN 設定**:為提高安全性,建議使用 VPN 環境下進行遠端連接。可以使用 NAS 上提供的 VPN 伺服器功能。
+2. **雙因素認證 (2FA)**:啟用雙因素認證,提高登入的安全性。
+3. **防火牆設定**:設定防火牆,限制外部連接的 IP 範圍,減少未經授權的訪問。
+
+## 8. 整合 Tailscale 連線
+
+!!! note ""
+
+ 可參考使用,透過建立類似大內網的方式連線到登記的網路設備中。
+
+Tailscale 是一種基於 WireGuard 的 VPN 服務,它使得設備之間形成一個私有的網路,簡化了遠端連線流程。
+
+### 設置 Tailscale
+
+1. **註冊和安裝 Tailscale**:連線到 [Tailscale 官方網站](https://tailscale.com/),建立一個帳戶並依指引安裝 Tailscale 用戶端在 NAS、工作電腦及其他需要連線的設備上。
+2. **設置 Tailscale 網路**:登入 Tailscale 控制台,將所有需要連接的設備加入到你的 Tailscale 網路中。
+3. **確認連線狀態**:確認在 Tailscale 控制台中顯示所有設備已成功連線。
+4. **測試 NAS 連接**:從外網通過安裝有 Tailscale 的設備,測試連接辦公室內的 NAS 確認連線順暢。
+
+### 使用 Tailscale 進行遠端存取
+
+遠端用戶只需在其個人電腦或手機上啟用 Tailscale,即可直接訪問在 Tailscale 網路內的 NAS,無需再進行繁瑣的端口轉發或 VPN 設置。
diff --git a/docs/user_guide/files_management/files_access.md b/docs/user_guide/files_management/files_access.md
new file mode 100644
index 0000000..8102f0e
--- /dev/null
+++ b/docs/user_guide/files_management/files_access.md
@@ -0,0 +1,62 @@
+---
+title: 檔案存取權限
+---
+
+# :material-folder-account: 檔案存取權限
+
+為提升公民團體的資安抵禦能力,以下針對資料機密等級、存取控制和資料標記設定了一套流程。
+
+## 1. 機密等級
+
+### 機密資料(Top Secret)
+
+- **範例**:涉密的策略計畫、成員個資、捐款者名單等。
+- **存取限制**:僅限極少數授權人員存取,如高層管理者和關鍵專案負責人。
+- **保護措施**:
+ - 儲存:所有機密資料需加密儲存,且存放在安全的伺服器或加密硬碟中。
+ - 傳輸:使用[加密通訊軟體](../../chapter/e2ee/im.md)傳輸,如 Signal 或 PGP 加密的電子郵件。
+
+### 內部機密資料(Confidential)
+
+- **範例**:未公開的內部報告、專案規劃文件等。
+- **存取限制**:僅限相關專案或業務的內部人員存取。
+- **保護措施**:
+ - 儲存:使用加密硬碟或伺服器存儲。
+ - 傳輸:確保資料在傳輸過程中經過加密,如利用 SSH 或 SSL 等通道。
+
+### 內部資料(Internal Use Only)
+
+- **範例**:組織運作手冊、內部通訊等。
+- **存取限制**:內部所有員工可存取,但不可對外分享。
+- **保護措施**:明確標示「僅供內部使用」,提醒員工勿對外泄露。
+
+### 公開資料(Public Use)
+
+- **範例**:公開的宣傳材料、網站內容、新聞稿等。
+- **存取限制**:可對外公開分享,不需特別存取限制。
+- **保護措施**:需確保資料的準確性和完整性,避免誤導或錯誤信息。
+
+## 2. 存取控制
+
+### 最小權限原則(Principle of Least Privilege)
+
+- **實施方法**:
+ - 為每位使用者設定最小的存取權限,即僅能存取其工作必需的資料。
+ - 使用權限管理工具(如 LDAP 或 IAM 系統)追蹤和管理使用者的存取權限。
+ - 定期(建議每季一次)審查和更新使用者的存取權限,取消不需要的權限。
+
+### 分離職能(Segregation of Duties)
+
+- **實施方法**:
+ - 定義和區隔不同職能的責任,例如:資金管理與審核職能由不同人員負責。
+ - 避免單一員工擁有多重機敏權限,減少內部風險。
+ - 實施定期內部稽核,確保分離職能的落實。
+
+## 3. 資料標記
+
+### 標籤與分級(Labeling and Classification)
+
+- **實施方法**:
+ - 依照上述機密等級為所有資料進行標記。
+ - 例:「機密」資料標註「Top Secret」,「內部」資料標註「Internal Use Only」。
+ - 每次新產生資料時,應即時進行分類和標記,保證資料在整個生命週期內得到適當的保護。
diff --git a/docs/user_guide/files_management/index.md b/docs/user_guide/files_management/index.md
new file mode 100644
index 0000000..821f079
--- /dev/null
+++ b/docs/user_guide/files_management/index.md
@@ -0,0 +1,24 @@
+---
+icon: material/folder-open
+title: 資料管理與備份
+---
+
+# :material-folder-open: 資料管理與備份
+
+## 簡介
+
+公民團體的資料管理和備份尤其重要,以確保資訊安全及緊急狀況下的資料恢復。
+
+1. **檔案存取權限**:
+ - 確保只有經過授權的成員可以存取特定的檔案與資料。這樣可以防止未經授權的存取和資料洩漏。
+ - 採用權限管理系統,根據成員的職責賦予不同的存取權限,確保機敏資料的安全。
+
+2. **資料備份與封存**:
+ - 定期備份資料,以防止因硬體損壞、惡意軟體或其他意外事件造成的資料遺失。
+ - 建議使用多種備份方式,如雲端備份及實體備份(例如外接硬碟或 USB 隨身碟),以提高備份的安全性與可用性。
+ - 備份應至少每週進行一次,以保證資料的最新性。
+
+3. **更新軟體**:
+ - 維持軟體的最新版本,以獲得最新的安全修補和功能改進。
+ - 設定自動更新功能,簡化更新流程,並減少成員手動更新的需求。
+ - 定期檢查所有使用的軟體,確保其在支持期限內,並及時移除或更換過期或不再受支持的軟體。
diff --git a/docs/user_guide/files_management/software_update.md b/docs/user_guide/files_management/software_update.md
new file mode 100644
index 0000000..a930e24
--- /dev/null
+++ b/docs/user_guide/files_management/software_update.md
@@ -0,0 +1,58 @@
+---
+title: 更新軟體
+---
+
+# :material-update: 更新軟體
+
+## 適合公民團體使用的開源軟體
+
+1. **Signal**:用來進行加密的即時訊息和語音通話,能夠保護通訊隱私。
+2. **ProtonMail**:提供端對端加密的電子郵件服務,確保電子郵件的內容不會被竊聽。
+3. **Jitsi Meet**:一個不需要帳號,便能進行加密視訊會議的工具,非常適合遠端開會。
+4. **Nextcloud**:一個讓你自己架設雲端檔案儲存服務的平台,便於安全地分享文件和協作。
+5. **VeraCrypt**:一個免費的加密軟體,用於加密整個磁碟或者創建加密容器來存放機敏文件。
+6. **KeePass**:一個密碼管理器,用於安全地儲存和管理所有密碼。
+7. **Tor 瀏覽器**:增加上網隱私及匿名性的網頁瀏覽器,很適合需要保護上網行為的使用者。
+8. **Mattermost**:一個開源的團隊協作和即時通訊平台,支持自有主機架設,保障聊天內容的私密性。
+9. **LibreOffice**:文書處理(Writer)、試算表(Calc)、簡報(Impress)、繪圖(Draw)和資料庫(Base),相容於Microsoft Office檔案格式,可以無縫交換文件。
+10. **Thunderbird**:電子郵件客戶端及行事曆整合。可以管理多個郵件帳戶、過濾垃圾郵件,以及使用加密功能來保護電子郵件隱私。
+11. **OnlyOffice**:文書處理、試算表、簡報。線上協作,可以多人同時編輯文件。
+
+## 在高風險環境中操作
+
+當公民團體需要在高風險環境中操作時,選擇合適的開源軟體非常重要。以下是幾款適合這類情況使用的開源軟體:
+
+1. **Tor(洋蔥路由器)**
+ - **用途:** 保護上網隱私,匿名訪問網路。
+ - **優點:** 隱匿你的實際IP位置,難以追踪。
+ - **網站:** [torproject.org](https://www.torproject.org)
+
+2. **Signal(端到端加密通訊)**
+ - **用途:** 安全的即時通訊軟體。
+ - **優點:** 端到端加密,保護對話內容不被攔截。
+ - **網站:** [signal.org](https://signal.org)
+
+3. **VeraCrypt(加密軟體)**
+ - **用途:** 加密硬碟和 USB 隨身碟。
+ - **優點:** 保護機敏資料,防止未經授權的存取。
+ - **網站:** [veracrypt.fr](https://www.veracrypt.fr)
+
+4. **KeePassXC(密碼管理工具)**
+ - **用途:** 安全管理各種密碼。
+ - **優點:** 集中管理所有帳號密碼,使用加密技術保護。
+ - **網站:** [keepassxc.org](https://keepassxc.org)
+
+5. **Tails(安全操作系統)**
+ - **用途:** 基於USB或DVD運行的操作系統,專為隱私和匿名設計。
+ - **優點:** 離開電腦後無痕跡,內建多種安全工具。
+ - **網站:** [tails.boum.org](https://tails.boum.org)
+
+6. **Jitsi Meet**
+ - **用途:** 安全的視訊會議軟體。
+ - **優點:** 不需帳號,點對點加密視訊會議。
+ - **網站:** [jitsi.org](https://jitsi.org)
+
+7. **MAT(Metadata Anonymisation Toolkit)**
+ - **用途:** 移除檔案的隱私相關後設資料(Metadata)。
+ - **優點:** 保護文件中可能洩露的隱私訊息。
+ - **網站:** [mat.boum.org](https://mat.boum.org)
diff --git a/docs/user_guide/index.md b/docs/user_guide/index.md
new file mode 100644
index 0000000..090de04
--- /dev/null
+++ b/docs/user_guide/index.md
@@ -0,0 +1,30 @@
+---
+icon: octicons/gear-16
+title: 操作手冊
+---
+
+# :octicons-gear-16: 操作手冊
+
+???+ abstract "學習歷程:「操作手冊」"
+
+
+
+ 您目前在「[操作手冊]」,指引您針對裝置或作業系統調整設定,以提昇資安抵禦能力。(完整流程:「[章節內容]」、「[操作手冊]」、「[政策制定]」、「[狀態評估]」、「[關懷與諮詢]」)
+
+ [章節內容]: ../chapter/index.md
+ [操作手冊]: ../user_guide/index.md
+ [政策制定]: ../policy/index.md
+ [狀態評估]: ../assessment/index.md
+ [關懷與諮詢]: ../support/index.md
+
+## 說明
+
+本章節對應到各課程中,需要針對裝置、作業系統、軟體安裝與設定…等,為了提昇資安抵禦能力的操作指引手冊。建議已先閱讀過「章節內容」對應的主題,具備基礎的知識後、較能了解其操作背後的目的與達成的目標。
+
+
diff --git a/docs/user_guide/network/browser_privacy.md b/docs/user_guide/network/browser_privacy.md
new file mode 100644
index 0000000..db1d899
--- /dev/null
+++ b/docs/user_guide/network/browser_privacy.md
@@ -0,0 +1,159 @@
+---
+title: 隱私瀏覽行為
+---
+
+# :simple-googlechrome: 隱私瀏覽行為
+
+本章節的操作會以 Chrome、Barve、Firefox 來進行基本的使用操作說明。另外也將額外介紹因不同情境可以使用的瀏覽器。
+
+## Mozilla Firefox
+
+在初次安裝後,需要調整一些項目能夠讓 Firefox 有更好的隱私、安全保護。
+
+### 隱私與安全設定
+
+**步驟:**
+
+- 打開 Firefox。點擊右上角的三條橫線菜單圖示。
+- 選擇「選項」或「設定」。
+- 點擊左側面板中的「隱私與安全」。
+
+**調整設定:**
+
+- **增強追蹤防護**:將設定調整為「嚴格」以阻擋更多追蹤器。
+- **Cookie**:選擇「僅允許原始網站」或者「封鎖所有第三方 Cookie」來減少被追蹤的風險。
+- **表單和密碼**:取消選取「記住登入網站的帳號和密碼」和「自動填寫地址」。考慮使用專門的密碼管理工具。
+- **瀏覽記錄**:選擇「永不記錄瀏覽記錄」或者使用「清除歷來記錄」並設為選項中的「永不」。
+- **網址列建議**:取消選取所有選項以減少外部資料的洩露。
+- **輸入資料**:取消選取「存儲站點填寫的表單和搜尋歷史」。
+- **跟蹤保護例外**:確定沒有設置任何例外站點。
+
+### 安全性設定
+
+**步驟:**
+
+- 仍然在「選項」或「設定」的「隱私與安全」頁面。
+
+**調整設定:**
+
+- **阻止危險與誤導性內容**:確保「阻止危險和誤導性內容」、「阻止不受信任來歷的軟體」均被選取。
+- **警告加密例外**:確保「警告當網站使用弱加密時」未選中。
+
+### 關閉行為分析與資料收集
+
+**步驟:**
+
+- 在「選項」或「設定」的「隱私與安全」頁面中,往下滑至「Firefox 資料數據收集與使用」部分。
+
+**調整設定:**
+
+- 取消選取所有「允許 Firefox …」選項以阻止 Mozilla 收集資料。
+
+### 關閉地理位置追蹤
+
+**步驟:**
+
+- 在 URL 欄輸入 `about:config`,按 Enter。
+- 會看到「此操作可能會使保固失效」,選擇「接受風險並繼續」。
+
+**調整設定:**
+
+- 搜尋 `geo.enabled`,然後將其值設為 `false` 以關閉地理位置追蹤。
+
+## 基於 Firefox 延伸
+
+何謂基於 Mozilla Firefox 設計,是因為其核心架構和功能皆建立在 Firefox 的程式碼之上,並在此基礎上進行了額外的安全性與隱私性增進。這實作方式即是以 Mozilla Firefox 為藍本進行二次開發,以達到特定需求或目標。
+
+### LibreWolf
+
+LibreWolf 是一個以隱私和安全為核心的開源瀏覽器專案。它基於 Mozilla Firefox,但移除了所有追蹤元件和遙測工具,以保障用戶的隱私。LibreWolf 預設啟用了多項隱私保護功能,並增加了額外的安全層級。
+
+增強實作的部分:
+
+1. **去除遙測和跟踪**:移除了 Firefox 中的所有測量紀錄工具和預設的網路行為分析,保障使用者資料不會被無意收集。
+2. **增強隱私設置**:預設強化隱私和安全設定,包括更強的 cookie 政策和內容攔截設置。
+3. **定期清理數據**:提供選項自動清理資料與數據,以防止長時間儲存個人資訊。
+4. **獨立於 Firefox 更新**:具有自己的更新流程和更新,專注於第一時間修復已知的安全漏洞。
+
+### Tor
+
+Tor 瀏覽器是一種開源的**網路匿名工具**,經由分散式的網路節點(稱為「洋蔥路由器」)來加密和路由使用者的網路流量,從而隱藏使用者的真實 IP 地址和網路活動。這個瀏覽器是基於 Mozilla Firefox 設計的,並且內建了隱私和安全功能,適合需要進行匿名瀏覽或處理機敏資訊的使用者。
+
+增強實作的部分:
+
+1. **整合 Tor 網路**:自動通過 Tor 網路進行通信,匿名隱藏使用者的 IP 位址,防止第三方追蹤。
+2. **阻止追蹤器和監視**:預設阻止各種常見的追蹤技術,使上網行為更難被追蹤。
+3. **強化隱私保護**:不留存瀏覽歷史記錄,清除 cookie 等個人資訊。
+4. **安全性設置**:針對腳本和附加元件的運行進行嚴格限制,避免潛在的網路攻擊。
+
+## Brave
+
+### 更新 Brave 瀏覽器
+
+- 確保您使用的是最新版的 Brave 瀏覽器,因為最新版本包含了最新的安全性修補與功能改進。
+- 打開 Brave 瀏覽器,點擊右上角的「三條橫線」
+- 選擇「關於 Brave」以檢查和更新瀏覽器。
+
+### 防護
+
+- 點擊右上角的「三條橫線」
+- 選擇「設定」
+- 在左側欄選擇「防護」
+ 1. **Shields**:確保預設啟用,以阻擋廣告和跟蹤器。
+ 2. **追蹤與廣告**:選擇「標準」或「嚴格」模式。
+ 3. **升級連線至 HTTPS**:「嚴格」模式。
+ 4. **指紋防護**:啟用。
+ 5. **封鎖 cookies**:選擇「封鎖第三方 cookies」。
+
+### 搜尋引擎設定
+
+- 選擇一個隱私保護更好的搜尋引擎,如 DuckDuckGo。
+- 點擊「設定」,選擇「搜尋引擎」,在「一般視窗」中選擇「DuckDuckGo」或其他隱私導向的選擇。
+
+### 瀏覽數據管理
+
+- 啟用自動清除瀏覽資料:
+ - 點擊「設定」、選擇「隱私權與安全性」
+ - 在「清除瀏覽數據」部分,設定為「不限時間」
+ - 在「離開」時自動清除包括瀏覽歷史、Cookies 和快取。
+
+### 內容設定
+
+- 點擊「設定」、選擇「隱私權與安全性」
+- 在「網站與 Shields 設定」部分,調整以下設定:
+ - **位置**:選擇「詢問」
+ - **攝影機**:選擇「詢問」
+ - **麥克風**:選擇「詢問」
+ - **通知**:選擇「阻止」
+
+### 內建功能
+
+- Brave 內建了 Tor 瀏覽功能,可在新視窗中選擇「以 Tor 開啟新私有窗口」來增強隱私保護。
+ - 點擊「設定」、選擇「隱私權與安全性」
+ - 「使用 Tor 的隱私視窗」:啟用。
+ - 「只在 Tor 視窗中解析 .onion 位址」:停用。
+
+## Safari 的困境
+
+相較於 Brave 和 Firefox,Safari 的防護等級確實存在一些不足之處,主要原因如下:
+
+1. **廣告攔截與隱私保護**:
+ - **Brave**:內建強大的廣告攔截和隱私保護功能,使用者可以輕鬆阻擋各類廣告、追蹤器和第三方 Cookie,使瀏覽過程更加私密和安全。
+ - **Firefox**:透過「嚴格追蹤保護」模式,同樣提供廣告攔截和防追蹤功能,並且有眾多隱私擴展插件可供選擇,如 uBlock Origin 和 Cookie AutoDelete,使使用者能夠進一步加強隱私和安全防護。
+ - **Safari**:雖然也具智慧追蹤防護(Intelligent Tracking Prevention,ITP),但其廣告攔截功能不像 Brave 那麼強大,附加元件的選擇相對較少。
+2. **擴展插件的多樣性與應用**:
+ - **Brave 和 Firefox**:附加元件(Extensions)的豐富性和多樣性是兩者的優勢。Firefox 更是以其擴展生態系統著名,使用者可以透過各種隱私和安全相關的套件來提升瀏覽器的防護能力。
+ - **Safari**:Apple 的套件生態系統相對封閉,擴展數量有限,而一些高效的安全和隱私插件並未有相對應的 Safari 版本。
+3. **多層次安全設計**:
+ - **Brave**:內建 Tor 模式,提供使用者更高規格的匿名性,使其在瀏覽網際網路時更加難以被追踪。
+ - **Firefox**:提供容器(Containers)功能,隔離不同網站的瀏覽階段,防止跨網站追蹤,也有刪除第三方追蹤器 cookie 的選項。
+ - **Safari**:雖然在 macOS 和 iOS 都有不錯的隱私和安全性措施,但在多層次和高度自訂的隱私保護方面稍顯不足。
+
+### 關於 iCloud Private Relay
+
+iCloud Private Relay 是 Apple 針對 iCloud+ 訂閲用戶提供的一項隱私保護功能,主要目的在於保護使用者在網際網路上瀏覽時的隱私。
+
+- **運作方式**:iCloud Private Relay 透過劃分兩個中繼站(Relay Nodes)來隱匿使用者的 IP 地址和瀏覽活動。第一個中繼站由 Apple 控制,主要用於隱匿使用者的 IP 地址並把請求轉發到第二個中繼站;第二個中繼站由 Apple 的合作夥伴運營,用來解密使用者請求並轉發到目標網站。
+- **隱私保護**:這種雙重中繼機制使得任何單一方都無法得知完整的使用者信息,即便是 Apple 自身也無法完全追蹤到使用者的瀏覽活動。
+
+然而 iCloud Private Relay 的提供範圍有限,僅適用於使用 Safari 瀏覽器與郵件,而永遠無法達到像 Tor 或 VPN 那樣的全面匿名效果。此外,iCloud Private Relay 並不是一個完整的 VPN 解決方案,無法掩蓋所有網路活動。
diff --git a/docs/user_guide/network/index.md b/docs/user_guide/network/index.md
new file mode 100644
index 0000000..4e6f52c
--- /dev/null
+++ b/docs/user_guide/network/index.md
@@ -0,0 +1,20 @@
+---
+icon: material/microsoft-internet-explorer
+title: 網路使用行為
+---
+
+# :material-microsoft-internet-explorer: 網路使用行為
+
+## 簡介說明
+
+1. **隱私瀏覽行為**:
+ - 使用隱私模式或無痕瀏覽,可以避免瀏覽記錄被保存。隱私模式並不能完全匿名,但能減少資料被泄露的風險。同時,建議定期清除瀏覽器的Cookie和儲存資料,以進一步保護隱私。
+
+2. **釣魚、詐騙**:
+ - 釣魚攻擊通常通過偽裝成真實的電子郵件或網站騙取個人資訊。提高警惕,不要隨意點擊來路不明的連結或下載附件,特別是在電子郵件或即時信息中。如果收到要求提供個人資訊的請求,請多加核對其來源。
+
+3. **VPN(虛擬私人網路)**:
+ - VPN 可以保護你的網路連線,讓你在公共 Wi-Fi 及其他不安全的網路環境中,更安全地瀏覽網頁。VPN 可以隱藏你的 IP 位址,讓你的網路活動更難被跟蹤。
+
+4. **網路與 Wi-Fi**:
+ - 使用安全的 Wi-Fi 連線非常重要。避免使用公開的 Wi-Fi,因為這些網路容易被駭客攻擊。如果必須使用公共 Wi-Fi,請使用 VPN 來增加安全性。同時,家用 Wi-Fi 網路應設置強密碼,並啟用網路加密功能(如 WPA3)。
diff --git a/docs/user_guide/network/phishing.md b/docs/user_guide/network/phishing.md
new file mode 100644
index 0000000..5010ee7
--- /dev/null
+++ b/docs/user_guide/network/phishing.md
@@ -0,0 +1,86 @@
+---
+title: 釣魚、詐騙
+---
+
+# :material-flip-to-back: 釣魚、詐騙
+
+!!! success "網路詐騙知多少?"
+
+ 網路詐騙知多少?可先完成以下的測驗,快速了解對於現實中的案例如何去判斷。
+
+ - [Jigsaw | 網路詐騙知多少](https://phishingquiz.withgoogle.com/)
+
+ 由 Google 資安團隊 [Jigsaw] 製作的線上測驗,每一題透過實際的範例檢測是否為「網路詐騙內容」或「正常內容」。開始測驗後,名稱與電子郵件可不為真實資訊,資訊提供是否為真實資料不影響測試過程與結果。
+
+ [Jigsaw]: https://jigsaw.google.com/
+
+## 辨別
+
+## 一步一步辨識釣魚信件
+
+1. **檢查寄件人**:確保寄件人地址是可信的且熟悉的,詐騙者常利用相似的域名迷惑使用者。
+2. **看清主題和內容**:釣魚信件常會用**威脅性**、**緊急性**或**誘惑性**的語言來誘使你開啟連結或下載附件。
+3. **瀏覽偏差的網址**:螢幕上的鼠標懸停在郵件中的連結上,不要直接點擊,確認顯示的網址是否與表面上的連結一致。
+4. **確認附件的文件類型**:謹慎處理任何意外收到的附件,特別是可執行文件(.exe)、壓縮文件(例如.zip)甚至為 PDF 檔案。
+5. **利用線上工具檢查**:利用以下工具交叉確認可疑網址和郵件。
+
+## 檢測工具
+
+### Email Header Analyzer
+
+- [MxToolbox Email Header Analyzer](https://mxtoolbox.com/EmailHeaders.aspx)
+- 用於解析電子郵件標頭(Email Headers),幫助你了解郵件的來源和路徑,從而確認其真實性。
+- 使用方法:將電子郵件的完整標頭複製到工具中進行解析。
+
+### Have I Been Pwned
+
+- [Have I Been Pwned](https://haveibeenpwned.com/)
+- 提供一個簡單的方法來檢查你的電子郵件地址或帳號是否出現在已外洩事件的資料庫中,進而判斷是否可能成為釣魚攻擊的目標。
+- 使用方法:在網站中輸入你的電子郵件地址或帳號,即可查詢相關外洩事件記錄。
+
+## 通報
+
+請記得在組織內完成收到疑似釣魚信件或是社交工程詐騙信件的通報流程,以下為簡易的通報流程範本,可以依照此流程專注在角色、人員的確立。
+
+!!! success "疑似釣魚信件通報流程"
+
+ !!! info "**1. 發現異常信件(發現者)**"
+
+ - **注意標記**:使用者應注意信件中的異常內容,例如語法錯誤、奇怪的發件人地址、請求機敏資訊等。
+ - **不點擊連結**:不要點擊信件中的任何連結或附件,確保信件內容未被執行。
+
+ !!! warning "**2. 通報主管(發現者、IT 負責人)**"
+
+ - **聯絡 IT 資安負責人**:立即向 IT 主管或資安負責人通報,提供信件的完整細節和觀察到的異常。
+
+ !!! note "**3. 提供信件(發現者、IT 負責人)**"
+
+ - **轉寄信件**:將可疑信件轉寄至專用的內部報告信箱(如:報告釣魚信件的郵件群組),確保原始的信件電子郵件標頭(Email Headers)保持完整。
+ - **標記信件**:在轉寄時,標題中增加「疑似釣魚信件」或類似標記,以引起受理人員的重視。
+
+ !!! note "**4. 記錄事件(IT 負責人)**"
+
+ - **填寫報告表格**:詳盡記錄涉及到的異常情況,例如發件人、信件時間、主題和內容摘要等。
+ - **保存證據**:保存原始信件作為證據,不得刪除或篡改。
+
+ !!! abstract "**5. 初步分析(IT 負責人、資安團隊)**"
+
+ - **安全團隊分析**:資安團隊對報告的信件進行初步分析,確認是否為釣魚攻擊或其他安全威脅。
+ - **評估風險**:根據初步分析評估潛在風險,確定是否需要進一步的應變作為。
+
+ !!! success "**6. 通知相關人員(全體人員)**"
+
+ - **防範提醒**:若確定信件具有釣魚特徵,向全體員工發出防範提醒,告知近期有相關的釣魚活動。
+ - **教育培訓**:再次強調資安教育和培訓,讓員工了解如何應對釣魚信件。
+
+## 其他資源
+
+!!! tip "其他資源"
+
+ - [Google 安全瀏覽 – Google 資訊公開報告](https://transparencyreport.google.com/safe-browsing/search)
+ - [Jigsaw | 網路詐騙知多少](https://phishingquiz.withgoogle.com/)
+ - [Protect Your Democracy](https://protectyourdemocracy.withgoogle.com/)
+ - [Safe Browsing – Google Safe Browsing](https://safebrowsing.google.com/)
+ - [社交工程 (網路詐騙和詐欺網站) | Google 搜尋中心](https://developers.google.com/search/docs/monitor-debug/security/social-engineering?hl=zh-tw)
+ - [什麼是網路釣魚攻擊? | Cloudflare](https://www.cloudflare.com/zh-tw/learning/access-management/phishing-attack/)
+ - [什麼是魚叉式網路釣魚?| 防止魚叉式網路釣魚和網路捕鯨 | Cloudflare](https://www.cloudflare.com/zh-tw/learning/access-management/spear-phishing/)
diff --git a/docs/user_guide/network/vpn.md b/docs/user_guide/network/vpn.md
new file mode 100644
index 0000000..b008fc0
--- /dev/null
+++ b/docs/user_guide/network/vpn.md
@@ -0,0 +1,127 @@
+---
+title: VPN
+---
+
+# :material-security-network: VPN
+
+## 推薦的服務
+
+目前推薦公民團體使用的 VPN 為:ProtonVPN、IVPN、Mullvad。其差異與特色可參考以下的表格:
+
+- ProtonVPN:
+- IVPN:
+- Mullvad:
+
+| | ProtonVPN | IVPN | Mullvad |
+| ------------ | -------------------------------- | ---------------------------------------- | --------------------------------- |
+| 伺服器數量 | 約 5,000 台[^1] | 約 91 台[^5] | 約 684 台[^9] |
+| 伺服器位置 | 約 91 個國家[^1] | 約 38 個國家[^5] | 約 44 個國家[^9] |
+| 安全稽核 | 報告[^2] | 報告[^6] | 報告[^10] |
+| 開源軟體 | 已開源[^3] | 已開源[^7] | 已開源[^11] |
+| 付款方式 | 信用卡、PayPal、比特幣、現金[^4] | 信用卡、PayPal、比特幣、禮物卡、現金[^8] | 信用卡、PayPal、比特幣、現金[^12] |
+| 連線紀錄 | 不保留紀錄 | 不保留紀錄 | 不保留紀錄 |
+| 帳戶匿名 | 需建立登入帳號 | 可匿名帳號 | 匿名帳號 |
+| 最小付費期間 | 月 | 週 | 月 |
+| 臺灣主機 | 20 台(台北、台中) | 1 台(台北) | 無 |
+| Tor 洋蔥路由 | 支援,部分國家 | 不支援 | 透過 Mullvad 為出口[^13] |
+
+[^1]: Proton VPN servers & locations.
+[^2]: Security experts declare all Proton apps secure after they pass their security audit.
+[^3]: All Proton VPN apps are now open source and audited.
+[^4]: Payment options - Proton VPN Support.
+[^5]: IVPN Servers.
+[^6]: IVPN Posts about Audit.
+[^7]: IVPN applications are now open source.
+[^8]: IVPN What payment methods do you accept?.
+[^9]: Mullvad Servers.
+[^10]: Mullvad Audits.
+[^11]: Mullvad - We value open source.
+[^12]: Mullvad Pricing.
+[^13]: Tor and Mullvad VPN.
+
+## Outline 自行架設
+
+[Outline VPN](https://getoutline.org/zh-TW/) 是一款免費且開源的 VPN 軟體,由 Jigsaw(Google 旗下的資安團隊)開發。它主要為新聞記者、議題行動者和公民團體設計,目的是提供簡單、安全和隱私的網路連線。
+
+Outline VPN 由兩個主要組件組成:
+
+1. **Outline Manager**:這是用來設定和管理 VPN 伺服器的圖形化介面應用程式。使用者可以使用它來快速設立新的伺服器、建立連線存取金鑰及監控流量使用情況。Outline Manager 可以在 Windows、macOS 和 Linux 上運行。
+
+2. **Outline Client**:這是提供使用者連接到 VPN 伺服器的應用程式。使用者需要將由 Outline Manager 建立的連線存取金鑰輸入到 Outline Client 中才能連接。Outline Client 支援的平臺包括 Windows、macOS、iOS、Android 和 Linux。
+
+### 伺服器
+
+Outline 內建的雲端伺服器為 [Digital Ocean]、[AWS] 與 [Google Cloud]。透過 AWS、Google Cloud 需要一些連線遠端服務的基礎能力,建議透過 Digital Ocean 來設定與建立。
+
+[Digital Ocean]: https://www.digitalocean.com/
+[AWS]: https://aws.amazon.com/
+[Google Cloud]: https://cloud.google.com/?hl=zh-TW
+
+### Digital Ocean 帳號建立
+
+如果從未使用過 Digital Ocean,需先建立帳號與付款設定,在後續的 Outline 設定過程中,因為會自動建立與設定主機。
+
+??? success "建立 Digital Ocean 帳號"
+
+ 1. **Digital Ocean 官方網站**
+ - 打開瀏覽器,進入 Digital Ocean 的官方網站:[https://www.digitalocean.com](https://www.digitalocean.com)。
+
+ 2. **註冊帳號**
+ - 點擊首頁右上角的「Sign Up」按鈕,進入註冊頁面。
+ - 可以選擇使用電子郵件註冊,或透過第三方帳號(如 Google 或 GitHub)快速註冊。
+
+ 3. **填寫註冊資訊**
+ - 如果選擇電子郵件註冊,請輸入你的電子郵件地址和密碼,然後點擊「Create Account」。
+
+ 4. **驗證電子郵件**
+ - Digital Ocean 會發送一封確認郵件到你所填寫的電子郵件地址。請前往郵箱,找到該郵件並點擊其中的確認連結來驗證電子郵件地址。
+
+??? success "完成信用卡付款的設定"
+
+ 在設定前,系統會引導完成 Project 的建立,請依指示完成一個 Project 的建立。
+
+ 1. **登入帳號**
+ - 驗證電子郵件後,使用註冊的電子郵件和密碼登入 Digital Ocean。
+
+ 2. **前往付款資訊設定頁面**
+ - 登入成功後,點擊右上角的個人頭像或使用者名稱,選擇「My Account」選項。
+
+ 3. **新增付款方式**
+ - 在左側列表「Billing」頁面,找到「Add a payment method」或「新增付款方式」按鈕或連結進入。
+
+ 4. **填寫信用卡資訊**
+ - 在彈出的輸入框中,填寫你的信用卡資訊,包括:
+ - 信用卡號、有效期限(MM/YY)、檢查碼(CVV)
+ - 確認填寫無誤後,點擊「Save」或「儲存」按鈕。
+
+ 5. **確認付款方式**
+ - 如果信用卡資訊正確且有效,系統會提示成功綁定信用卡。此後,所有的 Digital Ocean 服務費用會自動從你綁定的信用卡中扣款。
+
+### 下載和安裝 Outline Manager
+
+1. **下載 Outline Manager**:前往 [Outline 官網](https://getoutline.org/zh-TW/get-started/),下載適用於你的操作系統(Windows、macOS 或 Linux)的 **Outline Manager**。
+2. **安裝 Outline Manager**:根據下載後的安裝指引,完成安裝過程。
+
+### 建立 VPN 伺服器
+
+1. **開啟 Outline Manager**:啟動 Outline Manager 應用程式。
+2. **建立伺服器**:左側選擇「**+新增伺服器**」。
+3. **選擇建立方法**:
+ - **自動部署(建議)**:找到 DigitalOcean 區塊、點擊「建立伺服器」,並依照指示登入你的帳號、自動建立與部署伺服器。
+ - **手動部署(進階)**:若已經有現成虛擬主機(VPS),可以選擇手動設置伺服器。Outline Manager 會提供一段指令,將其複製並貼到伺服器的終端(SSH)中執行。
+4. **取得伺服器存取密鑰**:部署完成後,Outline Manager 會顯示你的伺服器管理密鑰。妥善保存這個密鑰,日後管理伺服器時需要使用。
+
+### 設定使用者連線金鑰
+
+1. **分享連線金鑰**:在 Outline Manager 中,點擊「新增金鑰」,為你的使用者建立新的連線金鑰。你可以通過複製連結或 QR Code 分享給使用者。
+2. **下載 Outline 用戶端t**:讓所有需要使用 VPN 的使用者前往 [Outline 官網下載](https://getoutline.org/zh-TW/get-started/ 從第三步驟開始),並安裝 Outline 用戶端應用程式(iOS、Android、Windows、macOS)。
+
+### 連接至 VPN
+
+1. **新增存取金鑰**:在 Outline 用戶端應用程式中,點擊右上方「+」,然後輸入或掃描你分享的存取金鑰。
+2. **連接 VPN**:存取金鑰新增完成後,即可在列表中開啟 VPN 連接。接著,Outline VPN 就會開始保護你的網路流量。
+
+!!! warning "注意事項"
+
+ - **定期更新**:保持伺服器和軟體的版本更新,以確保獲得最新的安全修正和功能改進。
+ - **監控流量和負載**:定期監控你的伺服器流量和負載情況,確保 VPN 服務穩定運行。
diff --git a/docs/user_guide/network/wifi.md b/docs/user_guide/network/wifi.md
new file mode 100644
index 0000000..4979314
--- /dev/null
+++ b/docs/user_guide/network/wifi.md
@@ -0,0 +1,45 @@
+---
+title: 網路與 Wi-Fi
+---
+
+# :material-wifi-check: 網路與 Wi-Fi
+
+在組織工作環境中,確保公民團體的網路與 Wi-Fi 設定安全,是抵禦潛在威脅的重要項目之一,「個人裝置」相關的設定已在其他章節呈現,本章節會專注在**網路通訊設備**的調整建議。如果在您的組織中無法驗證以下建議,可尋求信賴的團隊來協助您完成。
+
+!!! tip "個人裝置的網路設定"
+
+ - 個人裝置安全建議設定可以參考「[裝置安全](../devices/index.md)」章節的說明。可依裝置類型子分類查閱詳細的操作方式。
+ - :material-cellphone-information: [iOS]、:material-microsoft-windows: [Windows]、:material-apple-finder: [macOS]、:simple-android: [Android]。
+ [iOS]: ../devices/ios.md
+ [Windows]: ../devices/windows.md
+ [macOS]: ../devices//macOS.md
+ [Android]: ../devices/android.md
+
+## 無線路由器
+
+- [x] **更改預設管理者帳號及密碼**:預設的帳號與密碼往往容易被駭客獲得,因此,應立即更改路由器的預設**管理者帳號及密碼**。
+- [x] **更新設備**:定期檢查並更新無線路由器設備,確保它具備最新的安全規格及功能。
+- [x] **加密通訊**:確保 Wi-Fi 網路使用 WPA3 加密,若路由器未支援 WPA3,至少應使用 WPA2。避免使用 WEP,因為它已被證明不安全。
+- [x] **隱藏 SSID**:選擇不廣播 SSID(Service Set Identifier),增加潛在攻擊者發現無線基地台的難度。
+- [x] **禁用 WPS**:Wi-Fi Protected Setup(WPS)可能存在漏洞,應禁用此功能以提升安全性。
+
+## 防火牆與網路存取控制
+
+- [x] **啟用防火牆**:在路由器上啟用內建防火牆,並設定適當的規則來過濾不必要或可疑的流量。
+- [x] **建立訪客網路**:如果需要提供訪客使用 Wi-Fi,應為他們建立獨立的訪客帳號,這樣可以避免訪客的裝置直接接觸內部網路。
+- [x] **限制設備連接數量**:配置路由器設定,限制可以連接的設備數量,降低網路負載。
+
+## 網路監控與異常檢測
+
+- [x] **定期檢查連接設備**:期檢查路由器上有哪些裝置正在連接,確保沒有未知或未授權的設備。
+- [x] **設定異常流量警示**:如設備有能力,設定網路流量監控和警報提示,當流量出現異常時能及時通知。
+
+## 網路隔離與分段
+
+- [x] **網路分段**:將辦公網路與訪客或其他網路分段,例如,將內部網路和供公眾使用的網路、連結到不同機敏層級的 NAS,可置於不同的 VLAN,以提高安全性。
+- [x] **使用 VPN**: 使用 VPN 以保障經由公共網路連接到內部網路的資料數據安全性。
+
+## 教育與培訓
+
+- [x] **員工培訓**:定期對員工進行網路安全培訓,提升他們對常見攻擊手法如釣魚攻擊、社交工程的認識和防範能力。
+- [x] **強調設備管理**:教育員工對個人及辦公設備的網路安全管理,包括不隨意連接不信任的公共 Wi-Fi、經常更新設備的安全更新等。
diff --git a/docs/user_guide/profile/index.md b/docs/user_guide/profile/index.md
new file mode 100644
index 0000000..4950205
--- /dev/null
+++ b/docs/user_guide/profile/index.md
@@ -0,0 +1,35 @@
+---
+icon: material/smart-card
+title: 身分驗證
+---
+
+# :material-smart-card: 身分驗證
+
+關於「身分驗證」的操作,主要圍繞在密碼強度、密碼管理、可使用的多因子驗證方式,最後需要再次驗證是否會有因為某一驗證方式造成帳號無法登入問題。
+
+## 密碼強度
+
+1. **長度要求**:至少 12 個字符以上,包括大寫字母、小寫字母、數字與特殊符號(例如:`!@#$%^&*`)。
+2. **複雜性要求**:避免使用常見字詞或個人相關資訊(如生日、姓名等)。混合使用不同種類的字符以增加破解難度。
+3. **避免重複使用**:不同帳號應使用不同的密碼,避免全平台共享同一組。
+4. **定期修改**:建議每三至六個月更換一次密碼。
+
+## 密碼管理
+
+用密碼管理工具(如 Bitwarden、1Password、KeePassXC)來安全地存儲並產生複雜密碼。
+
+1. 下載並安裝你選定的密碼管理工具應用程式。
+2. 註冊並建立一個主密碼{==(這是唯一需要記住的密碼,務必設定得非常強且不可予人)==}。
+3. 將各個帳號的登入資訊如網址、帳號名稱、密碼保存進密碼管理工具中。
+4. 使用密碼管理工具自動產生並更新各個帳號的強密碼。
+
+## 多因子驗證(MFA)
+
+- **認證應用程式**:使用 Google Authenticator、Authy 等產生動態密碼。
+- **硬體安全金鑰**:Yubikey 或其他硬體金鑰,需插入或接觸設備進行認證。
+
+## 帳號無法登入問題排查
+
+1. **備用驗證方式**:在設定 MFA 時,應設定包括備用電子郵件、備用手機號碼,以便在主要驗證方式失效時可用來恢復登入。{++(如隱私考量,可以完全不採用此方案)++}
+2. **保存備用密鑰與備用碼**:在設置 MFA 應產生並存下備用一次性密碼(如應用程式產生的長串代碼),可在必需時恢復。
+3. **聯絡客服**:若僅有一種 MFA 方法且該方法失效,請聯絡該平台的客服支援進行身份驗證並恢復使用。
diff --git a/docs/user_guide/profile/mfa.md b/docs/user_guide/profile/mfa.md
new file mode 100644
index 0000000..e5467b8
--- /dev/null
+++ b/docs/user_guide/profile/mfa.md
@@ -0,0 +1,122 @@
+---
+title: 多因子驗證
+---
+
+# :material-card-account-details-star: 多因子驗證
+
+本章節的操作會以 OTP/TOTP、備份碼(Backup Code)、密碼金鑰(Passkey)、安全金鑰(Security Key)來進行基本的使用操作說明。
+
+!!! note "翻譯差異"
+
+ 以下提及的文字可能會有翻譯上的差異,請找到合適的標的或透過引導的連結前往。
+
+## OTP / TOTP
+
+!!! tip "什麼是 OTP / TOTP?"
+
+ - OTP(One-Time Password,一次性密碼)是一種只在一個登入流程中有效的密碼。最常見的應用是作為二階段驗證的一部分,提升系統的安全性。OTP 的特點是每次使用後即失效,防止密碼被重複使用或攔截。
+ - TOTP(Time-Based One-Time Password,**基於時間**的一次性密碼)是 OTP 的一種實現方式,根據當前時間產生一次性密碼。TOTP 的工作原理是使用一個共享的**秘密金鑰**和當前時間來產生動態的驗證碼。這通常需要手機上的應用程序(如 Google Authenticator 或 Authy)來生成與登入服務同步的密碼,每隔 30 秒更新一次。
+
+ 換句話說,OTP/TOTP 都可以離線使用,因為是透過**秘密金鑰+「使用序次或時間」**來產生六碼的驗證碼。
+
+### Google Authenticator
+
+Google Authenticator 是一款免費的手機應用程式,生成一次性密碼(OTP)來加強帳號安全。
+
+- [:simple-googleplay: Google Play 下載](https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=zh-tw)
+- [:simple-apple: Apple Store 下載](https://apps.apple.com/tw/app/google-authenticator/id388497605)
+
+#### 操作步驟
+
+1. 到應用商店下載並安裝 Google Authenticator。
+2. 登入要啟用多因子認證的服務,找到安全設定中的多因子認證選項。
+3. 選擇「使用 Google Authenticator」或相關選項。
+4. 使用 Google Authenticator 掃描服務提供的 QRCode。
+5. 或透過輸入應用程式產生的驗證碼完成設定。
+
+### Authy
+
+Authy 提供了多平台支援,不僅僅限於手機,還可以在電腦端使用,對於需要更高靈活度的團體非常有用。
+
+- [:simple-googleplay: Google Play 下載](https://play.google.com/store/apps/details?id=com.authy.authy&hl=zh-tw)
+- [:simple-apple: Apple Store 下載](https://itunes.apple.com/us/app/authy/id494168017)
+
+#### 操作步驟
+
+1. 到應用商店下載並安裝 Authy。
+2. 註冊帳號並完成基本設置(如手機號碼驗證)。
+3. 登入要啟用多因子認證的服務,找到安全設置中的多因子認證選項。
+4. 選擇「使用 Authy」或「使用 TOTP 應用」.
+5. 使用 Authy 掃描 QRCode 或手動輸入金鑰。
+6. 或使用輸入應用程式生成的驗證碼完成配置。
+
+## 備份碼 Backup Code
+
+備份碼(Backup code)是一組用於在無法使用常規雙因素驗證(2FA)方法時,仍然能夠登入帳號的替代驗證碼。這些備份碼通常是由服務提供者產生一系列一次性使用的數字或字母組合。使用備份碼的主要目的是確保{==使用者在無法取得手機、硬體金鑰或其他 2FA 裝置時,仍能夠安全地登入帳號==}。請妥善管理和使用備份碼,可以有效防範未經授權的登入行為。
+
+以下是備份碼的操作流程:
+
+1. **產生備份碼**:登入你的帳號,然後前往安全設定或帳號設定部分。找到雙因素驗證的選項,並依照指示產生備份碼。
+2. **儲存備份碼**:當備份碼被產生後,你會看到一組通常是 8~10 個左右的一次性使用碼。建議你將這些密碼組妥善儲存在一個安全的地方,例如紙本記錄、離線文件或加密的數位筆記本。
+3. **使用備份碼**:當你無法使用雙因素驗證方式(如手機、OTP/TOTP 驗證碼)登入帳號時,系統會提供選項輸入備份碼。選擇此選項並依提示輸入備份碼即可登入帳號。
+4. **管理備份碼**:每次使用備份碼登入後,該密碼就會失效。定期檢查並棄用、更新你的備份碼,以確保你總是擁有足夠且有效的備份碼。
+
+### 安全建議
+
+- 務必將備份碼儲存在一個既安全又方便取得的地方,不要與他人分享。
+- 在建立新的備份碼時,**舊的備份碼會失效**,因此需要重新儲存新產生的備份碼。
+- 如果你的備份碼被洩漏或者丟失,應立即產生新的備份碼並更新你的安全設定。
+
+## 密碼金鑰 Passkey
+
+Passkey 是一種新的身份驗證技術,旨在取代傳統的密碼,提供更安全和便捷的登入方式。它利用公共金鑰加密技術來保護使用者的帳號,不僅增強了安全性,還大幅降低了被駭風險。
+
+Passkey的核心概念是使用設備(例如手機)來產生和儲存一對加密密鑰:公鑰和私鑰。當使用者需要登入某個服務或網站時,該服務會要求使用者的手機發送公鑰進行驗證。如果公鑰匹配,設備會使用私鑰簽署一個驗證訊息,完成登入過程。
+
+!!! tip "Passkey 服務說明"
+
+ - [改用密碼金鑰代替密碼登入帳戶 - Google 帳戶說明](https://support.google.com/accounts/answer/13548313?hl=zh-Hant)
+ - [使用密碼登入 - Microsoft 支援服務](https://support.microsoft.com/zh-tw/account-billing/%E4%BD%BF%E7%94%A8%E5%AF%86%E7%A2%BC%E7%99%BB%E5%85%A5-09a49a86-ca47-406c-8acc-ed0e3c852c6d)
+ - [目前有哪些網路服務已支援 Passkeys? - Passkeys.io by HANKO](https://www.passkeys.io/who-supports-passkeys)
+
+以下是 Passkey 的主要優點:
+
+1. **安全性提升**:由於私鑰永遠不會離開使用者的設備,即使伺服器資料遭到攻擊,駭客也無法獲得使用者的私鑰。
+2. **防篡改與釣魚攻擊**:Passkey 只能使用在特定的應用程序或網站,因此即使攻擊者試圖偽裝成合法的網站,還是無法成功登入。
+3. **使用方便**:無需記住複雜的密碼,只需使用生物特徵(如指紋或臉部識別)或是PIN碼進行驗證。
+
+公民團體可以利用 Passkey 技術來保護成員的線上帳號,避免因密碼被盜或弱密碼造成的安全問題。
+
+## 安全金鑰 Security Key
+
+安全金鑰(Security Key)是一種實體裝置,用於增加線上帳號的登入安全性。它通常是一個小型 USB 或 NFC 裝置,可以插入電腦的 USB 埠或以無線方式與智慧型手機相連。Security Key 使用**基於硬體的驗證方式**,比軟體密碼或簡訊驗證的安全性更高。
+
+主要功能和優點:
+
+1. **雙重驗證(2FA)**:搭配傳統密碼使用,提供雙重驗證,提高帳戶的安全性。
+2. **抗盜用**:由於需要實體裝置才能登入,即使駭客獲取了您的帳戶密碼,若沒有這個安全金鑰,他們仍無法登入您的帳號。
+3. **簡便使用**:操作簡單,使用者只需插入安全金鑰並按一下按鈕即可完成驗證。
+4. **普遍兼容**:許多支持 [FIDO U2F (通用第二因素) ](https://zh.wikipedia.org/wiki/%E9%80%9A%E7%94%A8%E7%AC%AC%E4%BA%8C%E5%9B%A0%E7%B4%A0)和 [FIDO2](https://zh.wikipedia.org/wiki/FIDO2) 標準的平台和服務都可使用,例如 Google、Facebook 和 Microsoft 等。
+
+### 基本操作流程
+
+#### 初始設定
+
+1. **購買與取得:**選擇並購買符合 FIDO U2F 或 FIDO2 標準的安全金鑰。如:[YubiKey]、[Nitrokey]。
+2. **註冊金鑰:** 登入您想保護的帳號(例如 Google 帳號),找到安全設定選項,選擇新增安全金鑰。
+3. **插入金鑰:** 根據指示將安全金鑰插入電腦的 USB 埠,或利用 NFC 與手機連接。
+4. **完成驗證:** 按下金鑰上的按鈕,完成初始設定。
+
+[YubiKey]: https://yubico.com/
+[Nitrokey]: https://nitrokey.com/
+
+#### 日常使用
+
+1. **登入過程:** 每次登入您的帳號時,輸入您的密碼後,系統會提示您插入或觸碰您的安全金鑰。
+2. **進行驗證:** 確保金鑰已插入或已觸碰,等待驗證完成。
+
+### 注意事項
+
+- **備份金鑰:** 考慮準備一個備份安全金鑰,以防主要金鑰丟失或損壞。
+- **註冊多個帳號:** 確保每個需要保護的帳號都註冊了安全金鑰。
+- **安全保存:** 妥善保管您的安全金鑰,不要與不信任的第三方共用。
diff --git a/docs/user_guide/profile/password_manager.md b/docs/user_guide/profile/password_manager.md
new file mode 100644
index 0000000..847c5e4
--- /dev/null
+++ b/docs/user_guide/profile/password_manager.md
@@ -0,0 +1,116 @@
+---
+title: 密碼管理器
+---
+
+# :material-safe-square-outline: 密碼管理器
+
+本章節的操作會以 Bitwarden、1Password、KeePassXC 來進行基本的使用操作說明。
+
+!!! note "翻譯差異"
+
+ 以下提及的文字可能會有翻譯上的差異,請找到合適的標的或透過引導的連結前往。
+
+## Bitwarden
+
+### 註冊與安裝
+
+1. **註冊帳號**:
+ - 前往 [Bitwarden 官方網站](https://bitwarden.com/)。
+ - 點擊「開始使用」或「註冊」。
+ - 填寫電子郵件、姓名,設定一個**主密碼**,並確認主密碼。
+
+2. **下載與安裝應用程式**:
+ - 移至「[下載](https://bitwarden.com/download/)」頁面,根據您的裝置選擇相應的版本(Windows、Mac、Linux、iOS、Android)。
+ - 下載並安裝 Bitwarden 客戶端應用程式和瀏覽器擴充功能(Chrome、Brave、Firefox、Safari)。
+
+### 基本使用操作流程
+
+1. **登入**:
+ - 打開 Bitwarden 應用程式,用註冊的電子郵件和主密碼登入。{==(請記得也要開啟 2FA 驗證)==}
+
+2. **新增密碼**:
+ - 點擊「+」圖標或「新增項目」。
+ - 填寫項目名稱(如網站名稱)、用戶名、密碼等訊息。
+ - 點擊「保存」來儲存條目。
+
+3. **自動完成**:
+ - 在需要登入的網站上,點擊瀏覽器工具列中的 Bitwarden 圖標。
+ - 選擇相應的帳號,Bitwarden 會自動完成帳戶名稱和密碼。
+
+4. **建立強密碼**:
+ - 在新增或編輯密碼項目時,點擊密碼欄旁邊的「密碼產生器」圖標。
+ - 設定密碼長度和複雜度,點擊「建立」來產生強密碼。
+
+!!! tip "官方使用手冊"
+
+ - [Help Center | Bitwarden](https://bitwarden.com/help/)
+ - [Bitwarden Learning | Bitwarden](https://bitwarden.com/learning/)
+
+## 1Password
+
+### 註冊與安裝
+
+1. **註冊帳號**:
+ - 前往 [1Password 官方網站](https://1password.com/)。
+ - 點擊「開始使用」或「註冊」。
+ - 填寫電子郵件、姓名,並設定主密碼。
+
+2. **下載與安裝應用程式**:
+ - 前往「[下載](https://1password.com/zh-tw/downloads/)」頁面,選擇適合您的裝置系統(Windows、Mac、iOS、Android)。
+ - 下載並安裝 1Password 客戶端應用程式和瀏覽器擴充功能。
+
+### 基本使用操作流程
+
+1. **登入**:
+ - 打開 1Password 應用程式,使用主密碼進行登入。
+
+2. **新增密碼**:
+ - 點擊「+」圖標或「新項目」。
+ - 選擇項目類型,例如「登入」(Login)。
+ - 填寫網站名稱、用戶名、密碼等信息,點擊「保存」。
+
+3. **自動完成**:
+ - 在登入頁面上,點擊瀏覽器工具列上的 1Password 圖標。
+ - 選擇相應的登入項目,1Password 會自動完成帳號名稱和密碼。
+
+4. **建立強密碼**:
+ - 當新增或編輯項目時,點擊密碼欄旁邊的密碼產生器圖標。
+ - 設定負荷標準,例如長度和類型,點擊「建立」。
+
+
+!!! tip "官方使用手冊"
+
+ - [瞭解我們如何保護你的資訊 | 1Password](https://1password.com/zh-tw/tour/)
+ - [Resources to keep your passwords safe | 1Password](https://1password.com/resources/)
+
+## KeePassXC
+
+### 安裝
+
+1. **下載與安裝應用程式**:
+ - 前往 [KeePassXC 官方網站](https://keepassxc.org/)。
+ - 根據您的作業系統(Windows、Mac、Linux)選擇對應版本進行下載並安裝。
+
+### 基本使用操作流程
+
+1. **新建資料庫**:
+ - 打開 KeePassXC,選擇「新建資料庫」。
+ - 設定資料庫保存位置、名稱和主密碼,並根據需求設置其他參數。
+
+2. **新增密碼**:
+ - 打開剛建立的資料庫。
+ - 點擊工具欄上的「新增條目」或「新增」,並填寫標題、帳號名稱、密碼、網址等信息。
+ - 點擊「確定」完成儲存。
+
+3. **自動填充**:
+ - KeePassXC 本身不具備瀏覽器整合功能,需要安裝瀏覽器附加元件如 KeePassHTTP-Connector 或 KeePassXC-Browser。
+ - 安裝插件後,設定 KeePassXC 配合使用,即可自動完成表單內容。
+
+4. **建立強密碼**:
+ - 新增或編輯條目時,點擊密碼欄旁邊的「建立密碼」圖標。
+ - 設定密碼的要求如字元長度和種類,點擊「建立」來產生強密碼。
+
+!!! tip "官方使用手冊"
+
+ - [KeePassXC: Getting Started Guide](https://keepassxc.org/docs/KeePassXC_GettingStarted)
+ - [KeePassXC: User Guide](https://keepassxc.org/docs/KeePassXC_UserGuide)
diff --git a/docs/user_guide/risk_assessment.md b/docs/user_guide/risk_assessment.md
new file mode 100644
index 0000000..4eebd8c
--- /dev/null
+++ b/docs/user_guide/risk_assessment.md
@@ -0,0 +1,163 @@
+---
+icon: material/order-bool-descending-variant
+---
+# 風險評估表
+
+!!! note "風險評估表(正體中文版)"
+
+ - :open_file_folder: [表格下載](https://drive.google.com/file/d/1z70BFEZ64b99-MGoEY43Z5StHMoJLOJA/view)[^1]。
+
+ [^1]: 表格原始參考「[Security Education Companion](https://www.securityeducationcompanion.org/materials/threat-modeling-activity-handout-english-spanish)」。
+
+## 名詞定義
+
+- 資產:我想要保護什麼?
+- 攻擊者:我想要保護我的資產免於誰的攻擊?
+- 威脅:如果失敗了,潛在的後果是什麼?
+- 風險:特定威脅發生的可能性。
+- 攻擊者的能耐:攻擊者為了達成目的,有能力作些什麼?
+
+!!! success ""
+
+ - 不確定各項目如何進行,可以先參考「[章節內容:風險評估](../chapter/threat_modeling_class.md)」
+
+## 威脅模型範例
+
+### 範例:珠寶店商人
+
+請開啟「風險評估表」並從第一頁開始,範例是以「珠寶店商人的威脅建模」。
+
+??? abstract "1. 你要保護哪些資產?"
+
+ - 價值 100 萬元的鑽石
+ - 保險箱中的現金
+ - 警報代碼
+ - 客戶託管在保險箱中的物品
+
+??? question "2. 誰是你的攻擊者?"
+
+ - 珠寶小偷
+ - (還有誰可以打開保險箱?)
+
+??? failure "3. 如果失敗了,後果是什麼?"
+
+ - 珠寶失竊
+ - 損失客戶的信賴
+
+??? warning "4. 這些發生的機會有多大?"
+
+ - 員工亂放鑰匙
+ - 一隻憤怒的熊把大門拆了
+ - 客人偷瞄到保險箱的密碼
+ - 珠寶店遭到強烈抗議
+ - 寶石遭竊
+
+??? tip "5. 如何應對最有可能發生的風險?"
+
+ - 員工離職時更換密碼。
+
+### 範例:公民團體的風險評估
+
+??? abstract "1. 你要保護哪些資產?"
+
+ - 成員、支持者、捐款者、關係人際網的個人資料,包括姓名、聯絡方式和貢獻記錄。
+ - 團體的聲譽和信譽,以及其推動的議題。
+ - 財務資源,包括捐款和資助來源。
+ - 活動和項目的計劃和內部文件。
+
+??? question "2. 誰是你的攻擊者?"
+
+ - 駭客和惡意軟體可能試圖入侵網站或電子郵件系統,竊取成員資料或製造虛假資訊。
+ - 政府或監控機構可能對團體進行監視或監控其成員和活動。
+ - 業界利益相反者可能試圖破壞團體的聲譽或阻撓其活動。
+
+??? failure "3. 如果失敗了,後果是什麼?"
+
+ - 成員個人資料外洩可能導致隱私侵犯、信用卡詐騙或身份盜竊。
+ - 團體的聲譽受損可能導致支持者流失、資助減少或議題推動的困難。
+ - 財務資源外洩或損失可能導致活動和項目的中斷或取消。
+
+??? warning "4. 這些發生的機會有多大?"
+
+ - 在數位時代,公民團體面臨的網路攻擊和監控風險不容忽視。
+ - 團體活動可能引起爭議,使其成為攻擊者的目標。
+
+??? tip "5. 如何應對最有可能發生的風險?"
+
+ - 實施加密和其他安全措施來保護成員和支持者的個人資料。
+ - 定期進行資訊安全檢查,以確保系統和網站的安全性。
+ - 提供資安意識培訓,讓成員了解如何保護自己或他人的個人資訊。
+ - 與法律專家合作,確保團體的活動符合相關法律法規,並了解其權利和義務。
+
+### 範例:公民團體上街抗議的風險評估
+
+??? abstract "1. 你要保護哪些資產?"
+
+ - 參與者的安全和健康。
+ - 團體的聲譽和形象。
+ - 活動的合法性和合法權益。
+ - 公共空間的使用權。
+
+??? question "2. 誰是你的攻擊者?"
+
+ - 執法部門可能會試圖干預抗議活動,包括逮捕行動或使用武力驅散人群。
+ - 政府或其他利益相關者可能會試圖破壞抗議活動,包括透過媒體渲染不利形象或操控輿論。
+ - 極端分子或激進分子可能會試圖擾亂活動,導致暴力衝突或破壞財產。
+
+??? failure "3. 如果失敗了,後果是什麼?"
+
+ - 參與者可能遭受傷害、逮捕或其他不良後果。
+ - 團體的聲譽和形象可能受到損害,使得其目標難以實現。
+ - 活動的合法性和合法權益可能受到損害,面臨法律訴訟或其他法律後果。
+ - 公共空間的使用權可能受到限制或取消。
+
+??? warning "4. 這些發生的機會有多大?"
+
+ - 抗議活動往往受到政府和其他利益相關者的監視和干預,風險相對較高。
+ - 在某些情況下,抗議活動可能會引發暴力事件或其他不良後果。
+
+??? tip "5. 如何應對最有可能發生的風險?"
+
+ - 在策劃和組織抗議活動時,需要進行全面的風險評估,並制定應對措施。
+ - 提供安全培訓,教導參與者如何在抗議活動中保持安全,如何與執法部門溝通以及如何處理潛在的暴力衝突。
+ - 與律師團隊合作,確保抗議活動符合法律法規,並為可能的法律後果做好準備。
+ - 與媒體和公眾溝通,傳達活動的目的和訴求,並防止外界對活動的誤解或曲解。
+
+### 範例:公民團體辦公環境的風險評估
+
+??? abstract "1. 你要保護哪些資產?"
+
+ - 辦公室設備和資源,如電腦、印表機、資料庫、NAS。
+ - 成員和員工的個人資料,包括姓名、聯絡方式和其他機敏信息。
+ - 團體的財務資源,包括捐款、贊助和其他財務文件。
+ - 組織的知識產權,如內部文件、研究報告和策略文件。
+
+??? question "2. 誰是你的攻擊者?"
+
+ - 入室盜竊:不法分子可能會試圖闖入辦公室,竊取設備或文件。
+ - 登入嘗試:未經授權的登入或外部攻擊可能導致機敏資訊的外洩。
+ - 社交工程攻擊:駭客可能通過欺騙手段,如偽造電子郵件或電話詐騙,試圖獲取機敏訊息。
+ - 資料外洩:員工或成員的意外或有意訊息洩漏,可能導致機密文件的外洩。
+
+??? failure "3. 如果失敗了,後果是什麼?"
+
+ - 資產損失:設備和文件的丟失可能導致工作中斷或損害。
+ - 隱私侵犯:個人資料的外洩可能導致法律責任、罰款或信用卡詐騙。
+ - 財務損失:財務資源的外洩或盜竊可能導致經濟損失或資金流失。
+ - 聲譽損害:訊息洩漏或安全漏洞可能損害組織的聲譽和信譽。
+
+??? warning "4. 這些發生的機會有多大?"
+
+ - 辦公環境中的安全風險是實際存在的,尤其是當公民團體處於社會機敏問題的前沿時。
+ - 員工和成員的安全意識和訓練程度也會影響安全風險的程度。
+
+??? tip "5. 如何應對最有可能發生的風險?"
+
+ - 實施物理安全措施,如安全鎖和監視系統,以防止入室盜竊。
+ - 建立資料安全政策和程序,包括加密機敏資訊、定期備份資料和限制存取權限。
+ - 提供安全培訓,提高員工和成員對安全風險的認識,教導如何辨識和應對安全威脅。
+ - 定期進行安全檢查和稽查,確保辦公環境的安全措施得到有效實施並及時更新。
+
+## 政策制定
+
+[:material-arrow-right-bold: 政策制定:威脅建模](../policy/risk_assessment.md){ .md-button .md-button--primary }
diff --git a/includes/abbreviations.md b/includes/abbreviations.md
new file mode 100644
index 0000000..f416b5d
--- /dev/null
+++ b/includes/abbreviations.md
@@ -0,0 +1,18 @@
+*[2FA]: 2FA(雙因素認證)
+*[AES-256]: AES-256(Advanced Encryption Standard 256-bit)是一種對稱式加密演算法,是當前廣泛應用且被認為非常安全的加密方式之一。對稱式加密表示加密和解密使用的是同一把密鑰。在 AES-256 中,「256」代表密鑰的位元長度,即密鑰共有 256 位元。
+*[Cookie]: Cookie 是網站儲存在你瀏覽器中的小檔案,用來記錄你的偏好和登入狀態,提升使用體驗。
+*[E2EE]: E2EE(端對端加密)是一種加密傳送訊息類型,通信訊息資料從發送端出發,直到接收端解密之前,始終保持加密狀態。這意味著除了通信的兩端之外,任何中間節點,包括網路提供者、伺服器運營者甚至是駭客,都無法去解密這些訊息。
+*[eSIM]: 又名嵌入式 SIM(embedded-SIM)是內建於手機的電子 SIM 卡,不需要實體卡片就能連接電信網路。
+*[IP]: IP(網際協定)是用來識別和定位網路上設備的唯一地址,就像你的數位住址。
+*[ISP]: ISP(網際網路服務提供商)是提供你上網連線的公司,例如中華電信或遠傳電信。
+*[IT]: IT(資訊科技)指的是使用電腦和網路技術來管理和處理資訊的專業領域。
+*[MFA]: MFA(多因素驗證)
+*[OTP]: OTP(One-Time Password,一次性密碼)是一種只在一個登入流程中有效的密碼。最常見的應用是作為二階段驗證的一部分,提升系統的安全性。OTP 的特點是每次使用後即失效,防止密碼被重複使用或攔截。
+*[PGP]: PGP(Pretty Good Privacy) 是一種數位加密技術,用於保護電子郵件和文件的安全性。PGP 結合了對稱加密和非對稱加密的優勢,提供強大的資料保護功能,包括加密訊息、數位簽章以及鑑別身份等。
+*[SIM]: 使用者身分模組(Subscriber Identity Module,SIM),通常稱為「SIM卡」或「電話卡」是指插入手機的卡片,用來存取行動通訊服務。
+*[Tor]: Tor 是一個用來匿名上網的網路服務,通過多層加密來保護用戶的隱私。
+*[TOTP]: TOTP(Time-Based One-Time Password,**基於時間**的一次性密碼)是 OTP 的一種實現方式,根據當前時間產生一次性密碼。TOTP 的工作原理是使用一個共享的**秘密金鑰**和當前時間來產生動態的驗證碼。這通常需要手機上的應用程序(如 Google Authenticator 或 Authy)來生成與登入服務同步的密碼,每隔 30 秒更新一次。
+*[VPN]: VPN(虛擬私人網路)能加密你的網路流量,隱藏真實 IP 位址,保護隱私和安全,適合需要安全保密上網的情況。
+*[Wi-Fi]: Wi-Fi 是一種無線網路技術,讓你能在家中或公共場所無需連接網路線就能上網。
+*[WPA2]: WPA2 是一種用於保護無線網路連接的安全協定,提供了較強的加密和驗證機制。
+*[WPA3]: WPA3 是無線網路加密協定,提供比 WPA2 更高的安全性和防護力。
diff --git a/mkdocs.yml b/mkdocs.yml
new file mode 100644
index 0000000..d4cbc14
--- /dev/null
+++ b/mkdocs.yml
@@ -0,0 +1,183 @@
+site_name: 資安防護基礎教材 | Shield of Self-Defense (SSD)
+site_url: https://ssd.ocf.tw/
+site_description: "給公民團體 CSOs 的資安防護基礎教材"
+site_author: "財團法人開放文化基金會 (Open Culture Foundation, OCF)"
+copyright: "CC-BY 4.0 姓名標示"
+nav:
+ - 首頁:
+ - index.md
+ - 如何使用線上教材:
+ - howtouse/index.md
+ - 關懷組: howtouse/a_team.md
+ - 自學組: howtouse/self.md
+ - 教材資源:
+ - course/index.md
+ - 章節內容: chapter/index.md
+ - 操作手冊: user_guide/index.md
+ - 政策制定: policy/index.md
+ - 狀態評估: assessment/index.md
+ - 關懷與諮詢: support/index.md
+ - 章節內容:
+ - chapter/index.md
+ - 威脅建模: chapter/threat_modeling_class.md
+ - 裝置安全: chapter/devices.md
+ - 身份驗證:
+ - chapter/profile/index.md
+ - 密碼管理器: chapter/profile/password_manager.md
+ - 密碼強度: chapter/profile/password.md
+ - 多因子驗證: chapter/profile/mfa.md
+ - 網路使用行為:
+ - chapter/network/index.md
+ - 隱私瀏覽行為: chapter/network/browser_privacy.md
+ - 釣魚、詐騙: chapter/network/phishing.md
+ - VPN: chapter/network/vpn.md
+ - 網路與 Wi-Fi: chapter/network/wifi.md
+ - 加密通訊:
+ - chapter/e2ee/index.md
+ - 加密即時通訊: chapter/e2ee/im.md
+ - 加密電子郵件: chapter/e2ee/mails.md
+ - 帳號管理:
+ - chapter/account/index.md
+ - 帳號權限管理與追蹤: chapter/account/management.md
+ - 資料管理與備份:
+ - chapter/files_management/index.md
+ - 檔案存取權限: chapter/files_management/files_access.md
+ - 資料備份與封存: chapter/files_management/backup_archive.md
+ - 更新軟體: chapter/files_management/software_update.md
+ - 海外出差: chapter/abroad.md
+ - 操作手冊:
+ - user_guide/index.md
+ - 風險評估表: user_guide/risk_assessment.md
+ - 裝置安全:
+ - user_guide/devices/index.md
+ - iOS 裝置設定: user_guide/devices/ios.md
+ - MacOS: user_guide/devices/macOS.md
+ - Windows: user_guide/devices/windows.md
+ - Android: user_guide/devices/android.md
+ - 身份驗證:
+ - user_guide/profile/index.md
+ - 密碼管理器: user_guide/profile/password_manager.md
+ - 多因子驗證: user_guide/profile/mfa.md
+ - 網路使用行為:
+ - user_guide/network/index.md
+ - 隱私瀏覽行為: user_guide/network/browser_privacy.md
+ - 釣魚、詐騙: user_guide/network/phishing.md
+ - VPN: user_guide/network/vpn.md
+ - 網路與 Wi-Fi: user_guide/network/wifi.md
+ - 帳號管理:
+ - user_guide/account/index.md
+ - 帳號權限管理與追蹤: user_guide/account/management.md
+ - 資料管理與備份:
+ - user_guide/files_management/index.md
+ - 檔案存取權限: user_guide/files_management/files_access.md
+ - 資料備份與封存: user_guide/files_management/backup_archive.md
+ - 更新軟體: user_guide/files_management/software_update.md
+ - 海外出差: user_guide/abroad.md
+ - 政策制定:
+ - policy/index.md
+ - 威脅建模: ./policy/risk_assessment.md
+ - 裝置安全: ./policy/devices.md
+ - 身分驗證: ./policy/profile.md
+ - 網路使用行為: ./policy/network.md
+ - 加密通訊: ./policy/e2ee.md
+ - 帳號管理: ./policy/account_management.md
+ - 資料管理與備份: ./policy/files_management.md
+ - 海外出差: policy/abroad.md
+ - 狀態評估:
+ - assessment/index.md
+ - 檢查清單:
+ - assessment/checklist/index.md
+ - 場勘紀錄表: assessment/checklist/site_survey.md
+ - 課後任務清單: assessment/checklist/homework.md
+ - 關懷與諮詢:
+ - support/index.md
+ - 參考資源: ./support/resource.md
+theme:
+ name: material
+ icon:
+ logo: material/security
+ favicon: asserts/security.svg
+ palette:
+ - media: "(prefers-color-scheme)"
+ toggle:
+ icon: material/brightness-auto
+ name: 自動偵測模式
+ - media: "(prefers-color-scheme: light)"
+ scheme: default
+ primary: white
+ accent: pink
+ toggle:
+ icon: material/weather-sunny
+ name: 切換到深色模式
+ - media: "(prefers-color-scheme: dark)"
+ scheme: slate
+ primary: orange
+ accent: yellow
+ toggle:
+ icon: material/weather-night
+ name: 切換到明亮模式
+ language: zh-TW
+ features:
+ - search.suggest
+ - search.highlight
+ - search.share
+ - header.autohide
+ - navigation.indexes
+ - navigation.top
+ - navigation.tabs
+ - navigation.tabs.sticky
+ - navigation.footer
+ - content.tooltips
+ custom_dir: overrides
+plugins:
+ - search:
+ pipeline:
+ - stemmer
+ - stopWordFilter
+ - trimmer
+ lang:
+ - en
+ - zh
+ - offline
+ - privacy
+ - social:
+ cards_layout_options:
+ font_family: Noto Sans TC
+ - git-revision-date-localized:
+ locale: en
+ timezone: Asia/Taipei
+markdown_extensions:
+ - abbr
+ - attr_list
+ - pymdownx.snippets:
+ auto_append:
+ - includes/abbreviations.md
+ - md_in_html
+ - pymdownx.emoji:
+ emoji_index: !!python/name:material.extensions.emoji.twemoji
+ emoji_generator: !!python/name:material.extensions.emoji.to_svg
+ - admonition
+ - footnotes
+ - pymdownx.details
+ - pymdownx.superfences
+ - pymdownx.critic
+ - pymdownx.caret
+ - pymdownx.keys
+ - pymdownx.mark
+ - pymdownx.tilde
+ - pymdownx.tasklist:
+ custom_checkbox: true
+ clickable_checkbox: true
+ - pymdownx.tabbed:
+ alternate_style: true
+extra:
+ analytics:
+ provider: google
+ property: G-X3DG2E5E3W
+ social:
+ - icon: material/home
+ link: https://ssd.ocf.tw/
+ - icon: fontawesome/brands/github
+ link: https://github.com/ocftw/ssd
+extra_css:
+ - stylesheets/extra.css
diff --git a/overrides/main.html b/overrides/main.html
new file mode 100644
index 0000000..6dadcf8
--- /dev/null
+++ b/overrides/main.html
@@ -0,0 +1,58 @@
+{% extends "base.html" %} {% block site_meta %}
+
+
+
+
+{% if page.meta and page.meta.description %}
+
+{% elif config.site_description %}
+
+{% endif %}
+
+
+{% if page.meta and page.meta.author %}
+
+{% elif config.site_author %}
+
+{% endif %}
+
+
+{% if page.canonical_url %}
+
+{% endif %}
+
+
+{% if page.previous_page %}
+
+{% endif %}
+
+
+{% if page.next_page %}
+
+{% endif %}
+
+
+{% if "rss" in config.plugins %}
+
+
+{% endif %}
+
+
+
+
+
+
+{% endblock %}
diff --git a/overrides/partials/copyright.html b/overrides/partials/copyright.html
new file mode 100644
index 0000000..6efc78b
--- /dev/null
+++ b/overrides/partials/copyright.html
@@ -0,0 +1,21 @@
+
+ {% if config.copyright %}
+
+ {% endif %} {% if not config.extra.generator == false %} Made with
+
+ Material for MkDocs
+
+ {% endif %}
+
diff --git a/poetry.lock b/poetry.lock
new file mode 100644
index 0000000..0e728b2
--- /dev/null
+++ b/poetry.lock
@@ -0,0 +1,1236 @@
+# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
+
+[[package]]
+name = "awscli"
+version = "1.34.24"
+description = "Universal Command Line Environment for AWS."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "awscli-1.34.24-py3-none-any.whl", hash = "sha256:9641ae4edbb241a5d4646fa7e7f9b2b5ff45f36f77e6ffdd5c401cfecf6af317"},
+ {file = "awscli-1.34.24.tar.gz", hash = "sha256:466a41e85f15957af2d5e9d601c8c4808bea44547ac3a7e082186df0f932534e"},
+]
+
+[package.dependencies]
+botocore = "1.35.24"
+colorama = ">=0.2.5,<0.4.7"
+docutils = ">=0.10,<0.17"
+PyYAML = ">=3.10,<6.1"
+rsa = ">=3.1.2,<4.8"
+s3transfer = ">=0.10.0,<0.11.0"
+
+[[package]]
+name = "babel"
+version = "2.16.0"
+description = "Internationalization utilities"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"},
+ {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"},
+]
+
+[package.extras]
+dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
+
+[[package]]
+name = "boto3"
+version = "1.35.24"
+description = "The AWS SDK for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "boto3-1.35.24-py3-none-any.whl", hash = "sha256:97fcc1a14cbc759e4ba9535ced703a99fcf652c9c4b8dfcd06f292c80551684b"},
+ {file = "boto3-1.35.24.tar.gz", hash = "sha256:be7807f30f26d6c0057e45cfd09dad5968e664488bf4f9138d0bb7a0f6d8ed40"},
+]
+
+[package.dependencies]
+botocore = ">=1.35.24,<1.36.0"
+jmespath = ">=0.7.1,<2.0.0"
+s3transfer = ">=0.10.0,<0.11.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.21.0,<2.0a0)"]
+
+[[package]]
+name = "botocore"
+version = "1.35.24"
+description = "Low-level, data-driven core of boto 3."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "botocore-1.35.24-py3-none-any.whl", hash = "sha256:eb9ccc068255cc3d24c36693fda6aec7786db05ae6c2b13bcba66dce6a13e2e3"},
+ {file = "botocore-1.35.24.tar.gz", hash = "sha256:1e59b0f14f4890c4f70bd6a58a634b9464bed1c4c6171f87c8795d974ade614b"},
+]
+
+[package.dependencies]
+jmespath = ">=0.7.1,<2.0.0"
+python-dateutil = ">=2.1,<3.0.0"
+urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}
+
+[package.extras]
+crt = ["awscrt (==0.21.5)"]
+
+[[package]]
+name = "cairocffi"
+version = "1.7.1"
+description = "cffi-based cairo bindings for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f"},
+ {file = "cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b"},
+]
+
+[package.dependencies]
+cffi = ">=1.1.0"
+
+[package.extras]
+doc = ["sphinx", "sphinx_rtd_theme"]
+test = ["numpy", "pikepdf", "pytest", "ruff"]
+xcb = ["xcffib (>=1.4.0)"]
+
+[[package]]
+name = "cairosvg"
+version = "2.7.1"
+description = "A Simple SVG Converter based on Cairo"
+optional = false
+python-versions = ">=3.5"
+files = [
+ {file = "CairoSVG-2.7.1-py3-none-any.whl", hash = "sha256:8a5222d4e6c3f86f1f7046b63246877a63b49923a1cd202184c3a634ef546b3b"},
+ {file = "CairoSVG-2.7.1.tar.gz", hash = "sha256:432531d72347291b9a9ebfb6777026b607563fd8719c46ee742db0aef7271ba0"},
+]
+
+[package.dependencies]
+cairocffi = "*"
+cssselect2 = "*"
+defusedxml = "*"
+pillow = "*"
+tinycss2 = "*"
+
+[package.extras]
+doc = ["sphinx", "sphinx-rtd-theme"]
+test = ["flake8", "isort", "pytest"]
+
+[[package]]
+name = "certifi"
+version = "2024.8.30"
+description = "Python package for providing Mozilla's CA Bundle."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"},
+ {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"},
+]
+
+[[package]]
+name = "cffi"
+version = "1.17.1"
+description = "Foreign Function Interface for Python calling C code."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"},
+ {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"},
+ {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"},
+ {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"},
+ {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"},
+ {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"},
+ {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"},
+ {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"},
+ {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"},
+ {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"},
+ {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"},
+ {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"},
+ {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"},
+ {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"},
+ {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"},
+ {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"},
+ {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"},
+ {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"},
+ {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"},
+ {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"},
+ {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"},
+ {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"},
+ {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"},
+ {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"},
+ {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"},
+ {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"},
+ {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"},
+ {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"},
+ {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"},
+ {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"},
+ {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"},
+ {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"},
+ {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"},
+ {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"},
+ {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"},
+ {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"},
+ {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"},
+ {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"},
+ {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"},
+ {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"},
+ {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"},
+ {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"},
+ {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"},
+ {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"},
+ {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"},
+ {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"},
+ {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"},
+ {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"},
+ {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"},
+ {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"},
+ {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"},
+ {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"},
+ {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"},
+ {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"},
+ {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"},
+ {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"},
+ {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"},
+ {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"},
+ {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"},
+ {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"},
+ {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"},
+ {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"},
+ {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"},
+ {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"},
+ {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"},
+ {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"},
+ {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"},
+]
+
+[package.dependencies]
+pycparser = "*"
+
+[[package]]
+name = "charset-normalizer"
+version = "3.3.2"
+description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
+optional = false
+python-versions = ">=3.7.0"
+files = [
+ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"},
+ {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"},
+ {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"},
+ {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"},
+ {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"},
+ {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"},
+ {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"},
+ {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"},
+]
+
+[[package]]
+name = "click"
+version = "8.1.7"
+description = "Composable command line interface toolkit"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
+ {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
+]
+
+[package.dependencies]
+colorama = {version = "*", markers = "platform_system == \"Windows\""}
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+description = "Cross-platform colored terminal text."
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
+files = [
+ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
+ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
+]
+
+[[package]]
+name = "cssselect2"
+version = "0.7.0"
+description = "CSS selectors for Python ElementTree"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "cssselect2-0.7.0-py3-none-any.whl", hash = "sha256:fd23a65bfd444595913f02fc71f6b286c29261e354c41d722ca7a261a49b5969"},
+ {file = "cssselect2-0.7.0.tar.gz", hash = "sha256:1ccd984dab89fc68955043aca4e1b03e0cf29cad9880f6e28e3ba7a74b14aa5a"},
+]
+
+[package.dependencies]
+tinycss2 = "*"
+webencodings = "*"
+
+[package.extras]
+doc = ["sphinx", "sphinx_rtd_theme"]
+test = ["flake8", "isort", "pytest"]
+
+[[package]]
+name = "defusedxml"
+version = "0.7.1"
+description = "XML bomb protection for Python stdlib modules"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+files = [
+ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"},
+ {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"},
+]
+
+[[package]]
+name = "docutils"
+version = "0.16"
+description = "Docutils -- Python Documentation Utilities"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+files = [
+ {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"},
+ {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"},
+]
+
+[[package]]
+name = "ghp-import"
+version = "2.1.0"
+description = "Copy your docs directly to the gh-pages branch."
+optional = false
+python-versions = "*"
+files = [
+ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"},
+ {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"},
+]
+
+[package.dependencies]
+python-dateutil = ">=2.8.1"
+
+[package.extras]
+dev = ["flake8", "markdown", "twine", "wheel"]
+
+[[package]]
+name = "gitdb"
+version = "4.0.11"
+description = "Git Object Database"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "gitdb-4.0.11-py3-none-any.whl", hash = "sha256:81a3407ddd2ee8df444cbacea00e2d038e40150acfa3001696fe0dcf1d3adfa4"},
+ {file = "gitdb-4.0.11.tar.gz", hash = "sha256:bf5421126136d6d0af55bc1e7c1af1c397a34f5b7bd79e776cd3e89785c2b04b"},
+]
+
+[package.dependencies]
+smmap = ">=3.0.1,<6"
+
+[[package]]
+name = "gitpython"
+version = "3.1.43"
+description = "GitPython is a Python library used to interact with Git repositories"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "GitPython-3.1.43-py3-none-any.whl", hash = "sha256:eec7ec56b92aad751f9912a73404bc02ba212a23adb2c7098ee668417051a1ff"},
+ {file = "GitPython-3.1.43.tar.gz", hash = "sha256:35f314a9f878467f5453cc1fee295c3e18e52f1b99f10f6cf5b1682e968a9e7c"},
+]
+
+[package.dependencies]
+gitdb = ">=4.0.1,<5"
+
+[package.extras]
+doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"]
+test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"]
+
+[[package]]
+name = "idna"
+version = "3.10"
+description = "Internationalized Domain Names in Applications (IDNA)"
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
+ {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
+]
+
+[package.extras]
+all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
+
+[[package]]
+name = "jinja2"
+version = "3.1.4"
+description = "A very fast and expressive template engine."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
+ {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
+]
+
+[package.dependencies]
+MarkupSafe = ">=2.0"
+
+[package.extras]
+i18n = ["Babel (>=2.7)"]
+
+[[package]]
+name = "jmespath"
+version = "1.0.1"
+description = "JSON Matching Expressions"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"},
+ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"},
+]
+
+[[package]]
+name = "markdown"
+version = "3.7"
+description = "Python implementation of John Gruber's Markdown."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "Markdown-3.7-py3-none-any.whl", hash = "sha256:7eb6df5690b81a1d7942992c97fad2938e956e79df20cbc6186e9c3a77b1c803"},
+ {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"},
+]
+
+[package.extras]
+docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"]
+testing = ["coverage", "pyyaml"]
+
+[[package]]
+name = "markupsafe"
+version = "2.1.5"
+description = "Safely add untrusted strings to HTML/XML markup."
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"},
+ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"},
+ {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"},
+ {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"},
+ {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"},
+ {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"},
+ {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"},
+ {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"},
+ {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"},
+ {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"},
+ {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"},
+ {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"},
+ {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"},
+ {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"},
+ {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"},
+ {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"},
+ {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"},
+ {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"},
+ {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"},
+ {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"},
+ {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"},
+ {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"},
+ {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"},
+ {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"},
+ {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"},
+ {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"},
+ {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"},
+ {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"},
+ {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"},
+ {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"},
+ {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"},
+ {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"},
+ {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"},
+ {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"},
+ {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"},
+ {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"},
+ {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"},
+ {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"},
+ {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"},
+ {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"},
+ {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"},
+ {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"},
+ {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"},
+ {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"},
+ {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"},
+ {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"},
+ {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"},
+ {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"},
+ {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"},
+ {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"},
+ {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"},
+ {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"},
+ {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"},
+ {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"},
+ {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"},
+ {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"},
+ {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"},
+ {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"},
+ {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"},
+ {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"},
+]
+
+[[package]]
+name = "mergedeep"
+version = "1.3.4"
+description = "A deep merge function for 🐍."
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"},
+ {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"},
+]
+
+[[package]]
+name = "mkdocs"
+version = "1.6.1"
+description = "Project documentation with Markdown."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"},
+ {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"},
+]
+
+[package.dependencies]
+click = ">=7.0"
+colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""}
+ghp-import = ">=1.0"
+jinja2 = ">=2.11.1"
+markdown = ">=3.3.6"
+markupsafe = ">=2.0.1"
+mergedeep = ">=1.3.4"
+mkdocs-get-deps = ">=0.2.0"
+packaging = ">=20.5"
+pathspec = ">=0.11.1"
+pyyaml = ">=5.1"
+pyyaml-env-tag = ">=0.1"
+watchdog = ">=2.0"
+
+[package.extras]
+i18n = ["babel (>=2.9.0)"]
+min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"]
+
+[[package]]
+name = "mkdocs-get-deps"
+version = "0.2.0"
+description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"},
+ {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"},
+]
+
+[package.dependencies]
+mergedeep = ">=1.3.4"
+platformdirs = ">=2.2.0"
+pyyaml = ">=5.1"
+
+[[package]]
+name = "mkdocs-git-revision-date-localized-plugin"
+version = "1.2.9"
+description = "Mkdocs plugin that enables displaying the localized date of the last git modification of a markdown file."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "mkdocs_git_revision_date_localized_plugin-1.2.9-py3-none-any.whl", hash = "sha256:dea5c8067c23df30275702a1708885500fadf0abfb595b60e698bffc79c7a423"},
+ {file = "mkdocs_git_revision_date_localized_plugin-1.2.9.tar.gz", hash = "sha256:df9a50873fba3a42ce9123885f8c53d589e90ef6c2443fe3280ef1e8d33c8f65"},
+]
+
+[package.dependencies]
+babel = ">=2.7.0"
+GitPython = "*"
+mkdocs = ">=1.0"
+pytz = "*"
+
+[package.extras]
+all = ["GitPython", "babel (>=2.7.0)", "click", "codecov", "mkdocs (>=1.0)", "mkdocs-gen-files", "mkdocs-git-authors-plugin", "mkdocs-material", "mkdocs-static-i18n", "pytest", "pytest-cov", "pytz"]
+base = ["GitPython", "babel (>=2.7.0)", "mkdocs (>=1.0)", "pytz"]
+dev = ["click", "codecov", "mkdocs-gen-files", "mkdocs-git-authors-plugin", "mkdocs-material", "mkdocs-static-i18n", "pytest", "pytest-cov"]
+
+[[package]]
+name = "mkdocs-material"
+version = "9.5.36"
+description = "Documentation that simply works"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "mkdocs_material-9.5.36-py3-none-any.whl", hash = "sha256:36734c1fd9404bea74236242ba3359b267fc930c7233b9fd086b0898825d0ac9"},
+ {file = "mkdocs_material-9.5.36.tar.gz", hash = "sha256:140456f761320f72b399effc073fa3f8aac744c77b0970797c201cae2f6c967f"},
+]
+
+[package.dependencies]
+babel = ">=2.10,<3.0"
+cairosvg = {version = ">=2.6,<3.0", optional = true, markers = "extra == \"imaging\""}
+colorama = ">=0.4,<1.0"
+jinja2 = ">=3.0,<4.0"
+markdown = ">=3.2,<4.0"
+mkdocs = ">=1.6,<2.0"
+mkdocs-material-extensions = ">=1.3,<2.0"
+paginate = ">=0.5,<1.0"
+pillow = {version = ">=10.2,<11.0", optional = true, markers = "extra == \"imaging\""}
+pygments = ">=2.16,<3.0"
+pymdown-extensions = ">=10.2,<11.0"
+regex = ">=2022.4"
+requests = ">=2.26,<3.0"
+
+[package.extras]
+git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"]
+imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"]
+recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"]
+
+[[package]]
+name = "mkdocs-material-extensions"
+version = "1.3.1"
+description = "Extension pack for Python Markdown and MkDocs Material."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"},
+ {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"},
+]
+
+[[package]]
+name = "packaging"
+version = "24.1"
+description = "Core utilities for Python packages"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"},
+ {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"},
+]
+
+[[package]]
+name = "paginate"
+version = "0.5.7"
+description = "Divides large result sets into pages for easier browsing"
+optional = false
+python-versions = "*"
+files = [
+ {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"},
+ {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"},
+]
+
+[package.extras]
+dev = ["pytest", "tox"]
+lint = ["black"]
+
+[[package]]
+name = "pathspec"
+version = "0.12.1"
+description = "Utility library for gitignore style pattern matching of file paths."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
+ {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
+]
+
+[[package]]
+name = "pillow"
+version = "10.4.0"
+description = "Python Imaging Library (Fork)"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e"},
+ {file = "pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d"},
+ {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856"},
+ {file = "pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f"},
+ {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b"},
+ {file = "pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc"},
+ {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e"},
+ {file = "pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46"},
+ {file = "pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984"},
+ {file = "pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141"},
+ {file = "pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1"},
+ {file = "pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c"},
+ {file = "pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be"},
+ {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3"},
+ {file = "pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6"},
+ {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe"},
+ {file = "pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319"},
+ {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d"},
+ {file = "pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696"},
+ {file = "pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496"},
+ {file = "pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91"},
+ {file = "pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22"},
+ {file = "pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94"},
+ {file = "pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597"},
+ {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80"},
+ {file = "pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca"},
+ {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef"},
+ {file = "pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a"},
+ {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b"},
+ {file = "pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9"},
+ {file = "pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42"},
+ {file = "pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a"},
+ {file = "pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9"},
+ {file = "pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3"},
+ {file = "pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb"},
+ {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70"},
+ {file = "pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be"},
+ {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0"},
+ {file = "pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc"},
+ {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a"},
+ {file = "pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309"},
+ {file = "pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060"},
+ {file = "pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea"},
+ {file = "pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d"},
+ {file = "pillow-10.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8d4d5063501b6dd4024b8ac2f04962d661222d120381272deea52e3fc52d3736"},
+ {file = "pillow-10.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7c1ee6f42250df403c5f103cbd2768a28fe1a0ea1f0f03fe151c8741e1469c8b"},
+ {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15e02e9bb4c21e39876698abf233c8c579127986f8207200bc8a8f6bb27acf2"},
+ {file = "pillow-10.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a8d4bade9952ea9a77d0c3e49cbd8b2890a399422258a77f357b9cc9be8d680"},
+ {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:43efea75eb06b95d1631cb784aa40156177bf9dd5b4b03ff38979e048258bc6b"},
+ {file = "pillow-10.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:950be4d8ba92aca4b2bb0741285a46bfae3ca699ef913ec8416c1b78eadd64cd"},
+ {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d7480af14364494365e89d6fddc510a13e5a2c3584cb19ef65415ca57252fb84"},
+ {file = "pillow-10.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:73664fe514b34c8f02452ffb73b7a92c6774e39a647087f83d67f010eb9a0cf0"},
+ {file = "pillow-10.4.0-cp38-cp38-win32.whl", hash = "sha256:e88d5e6ad0d026fba7bdab8c3f225a69f063f116462c49892b0149e21b6c0a0e"},
+ {file = "pillow-10.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:5161eef006d335e46895297f642341111945e2c1c899eb406882a6c61a4357ab"},
+ {file = "pillow-10.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:0ae24a547e8b711ccaaf99c9ae3cd975470e1a30caa80a6aaee9a2f19c05701d"},
+ {file = "pillow-10.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:298478fe4f77a4408895605f3482b6cc6222c018b2ce565c2b6b9c354ac3229b"},
+ {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:134ace6dc392116566980ee7436477d844520a26a4b1bd4053f6f47d096997fd"},
+ {file = "pillow-10.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:930044bb7679ab003b14023138b50181899da3f25de50e9dbee23b61b4de2126"},
+ {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:c76e5786951e72ed3686e122d14c5d7012f16c8303a674d18cdcd6d89557fc5b"},
+ {file = "pillow-10.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b2724fdb354a868ddf9a880cb84d102da914e99119211ef7ecbdc613b8c96b3c"},
+ {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dbc6ae66518ab3c5847659e9988c3b60dc94ffb48ef9168656e0019a93dbf8a1"},
+ {file = "pillow-10.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:06b2f7898047ae93fad74467ec3d28fe84f7831370e3c258afa533f81ef7f3df"},
+ {file = "pillow-10.4.0-cp39-cp39-win32.whl", hash = "sha256:7970285ab628a3779aecc35823296a7869f889b8329c16ad5a71e4901a3dc4ef"},
+ {file = "pillow-10.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:961a7293b2457b405967af9c77dcaa43cc1a8cd50d23c532e62d48ab6cdd56f5"},
+ {file = "pillow-10.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:32cda9e3d601a52baccb2856b8ea1fc213c90b340c542dcef77140dfa3278a9e"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885"},
+ {file = "pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:a02364621fe369e06200d4a16558e056fe2805d3468350df3aef21e00d26214b"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:1b5dea9831a90e9d0721ec417a80d4cbd7022093ac38a568db2dd78363b00908"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b885f89040bb8c4a1573566bbb2f44f5c505ef6e74cec7ab9068c900047f04b"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dd88ded2e6d74d31e1e0a99a726a6765cda32d00ba72dc37f0651f306daaa8"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:2db98790afc70118bd0255c2eeb465e9767ecf1f3c25f9a1abb8ffc8cfd1fe0a"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f7baece4ce06bade126fb84b8af1c33439a76d8a6fd818970215e0560ca28c27"},
+ {file = "pillow-10.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cfdd747216947628af7b259d274771d84db2268ca062dd5faf373639d00113a3"},
+ {file = "pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06"},
+]
+
+[package.extras]
+docs = ["furo", "olefile", "sphinx (>=7.3)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinxext-opengraph"]
+fpx = ["olefile"]
+mic = ["olefile"]
+tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
+typing = ["typing-extensions"]
+xmp = ["defusedxml"]
+
+[[package]]
+name = "platformdirs"
+version = "4.3.6"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"},
+ {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"},
+]
+
+[package.extras]
+docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"]
+type = ["mypy (>=1.11.2)"]
+
+[[package]]
+name = "pyasn1"
+version = "0.6.1"
+description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"},
+ {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"},
+]
+
+[[package]]
+name = "pycparser"
+version = "2.22"
+description = "C parser in Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"},
+ {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
+]
+
+[[package]]
+name = "pygments"
+version = "2.18.0"
+description = "Pygments is a syntax highlighting package written in Python."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"},
+ {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"},
+]
+
+[package.extras]
+windows-terminal = ["colorama (>=0.4.6)"]
+
+[[package]]
+name = "pymdown-extensions"
+version = "10.10.1"
+description = "Extension pack for Python Markdown."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "pymdown_extensions-10.10.1-py3-none-any.whl", hash = "sha256:6c74ea6c2e2285186a241417480fc2d3cc52941b3ec2dced4014c84dc78c5493"},
+ {file = "pymdown_extensions-10.10.1.tar.gz", hash = "sha256:ad277ee4739ced051c3b6328d22ce782358a3bec39bc6ca52815ccbf44f7acdc"},
+]
+
+[package.dependencies]
+markdown = ">=3.6"
+pyyaml = "*"
+
+[package.extras]
+extra = ["pygments (>=2.12)"]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+description = "Extensions to the standard Python datetime module"
+optional = false
+python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
+files = [
+ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"},
+ {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"},
+]
+
+[package.dependencies]
+six = ">=1.5"
+
+[[package]]
+name = "pytz"
+version = "2024.2"
+description = "World timezone definitions, modern and historical"
+optional = false
+python-versions = "*"
+files = [
+ {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"},
+ {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"},
+]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.2"
+description = "YAML parser and emitter for Python"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
+ {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"},
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"},
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"},
+ {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"},
+ {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"},
+ {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"},
+ {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"},
+ {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"},
+ {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"},
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"},
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"},
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"},
+ {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"},
+ {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"},
+ {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"},
+ {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"},
+ {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
+ {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
+ {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
+ {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
+ {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
+ {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
+ {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"},
+ {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"},
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"},
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"},
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"},
+ {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"},
+ {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"},
+ {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"},
+ {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"},
+ {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"},
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"},
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"},
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"},
+ {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"},
+ {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"},
+ {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"},
+ {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"},
+ {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"},
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"},
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"},
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"},
+ {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"},
+ {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"},
+ {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"},
+ {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"},
+ {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
+]
+
+[[package]]
+name = "pyyaml-env-tag"
+version = "0.1"
+description = "A custom YAML tag for referencing environment variables in YAML files. "
+optional = false
+python-versions = ">=3.6"
+files = [
+ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"},
+ {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"},
+]
+
+[package.dependencies]
+pyyaml = "*"
+
+[[package]]
+name = "regex"
+version = "2024.9.11"
+description = "Alternative regular expression module, to replace re."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1494fa8725c285a81d01dc8c06b55287a1ee5e0e382d8413adc0a9197aac6408"},
+ {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0e12c481ad92d129c78f13a2a3662317e46ee7ef96c94fd332e1c29131875b7d"},
+ {file = "regex-2024.9.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16e13a7929791ac1216afde26f712802e3df7bf0360b32e4914dca3ab8baeea5"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46989629904bad940bbec2106528140a218b4a36bb3042d8406980be1941429c"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a906ed5e47a0ce5f04b2c981af1c9acf9e8696066900bf03b9d7879a6f679fc8"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a091b0550b3b0207784a7d6d0f1a00d1d1c8a11699c1a4d93db3fbefc3ad35"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ddcd9a179c0a6fa8add279a4444015acddcd7f232a49071ae57fa6e278f1f71"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b41e1adc61fa347662b09398e31ad446afadff932a24807d3ceb955ed865cc8"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ced479f601cd2f8ca1fd7b23925a7e0ad512a56d6e9476f79b8f381d9d37090a"},
+ {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:635a1d96665f84b292e401c3d62775851aedc31d4f8784117b3c68c4fcd4118d"},
+ {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c0256beda696edcf7d97ef16b2a33a8e5a875affd6fa6567b54f7c577b30a137"},
+ {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ce4f1185db3fbde8ed8aa223fc9620f276c58de8b0d4f8cc86fd1360829edb6"},
+ {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:09d77559e80dcc9d24570da3745ab859a9cf91953062e4ab126ba9d5993688ca"},
+ {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a22ccefd4db3f12b526eccb129390942fe874a3a9fdbdd24cf55773a1faab1a"},
+ {file = "regex-2024.9.11-cp310-cp310-win32.whl", hash = "sha256:f745ec09bc1b0bd15cfc73df6fa4f726dcc26bb16c23a03f9e3367d357eeedd0"},
+ {file = "regex-2024.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:01c2acb51f8a7d6494c8c5eafe3d8e06d76563d8a8a4643b37e9b2dd8a2ff623"},
+ {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2cce2449e5927a0bf084d346da6cd5eb016b2beca10d0013ab50e3c226ffc0df"},
+ {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b37fa423beefa44919e009745ccbf353d8c981516e807995b2bd11c2c77d268"},
+ {file = "regex-2024.9.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64ce2799bd75039b480cc0360907c4fb2f50022f030bf9e7a8705b636e408fad"},
+ {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4cc92bb6db56ab0c1cbd17294e14f5e9224f0cc6521167ef388332604e92679"},
+ {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d05ac6fa06959c4172eccd99a222e1fbf17b5670c4d596cb1e5cde99600674c4"},
+ {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:040562757795eeea356394a7fb13076ad4f99d3c62ab0f8bdfb21f99a1f85664"},
+ {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6113c008a7780792efc80f9dfe10ba0cd043cbf8dc9a76ef757850f51b4edc50"},
+ {file = "regex-2024.9.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e5fb5f77c8745a60105403a774fe2c1759b71d3e7b4ca237a5e67ad066c7199"},
+ {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:54d9ff35d4515debf14bc27f1e3b38bfc453eff3220f5bce159642fa762fe5d4"},
+ {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df5cbb1fbc74a8305b6065d4ade43b993be03dbe0f8b30032cced0d7740994bd"},
+ {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7fb89ee5d106e4a7a51bce305ac4efb981536301895f7bdcf93ec92ae0d91c7f"},
+ {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a738b937d512b30bf75995c0159c0ddf9eec0775c9d72ac0202076c72f24aa96"},
+ {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e28f9faeb14b6f23ac55bfbbfd3643f5c7c18ede093977f1df249f73fd22c7b1"},
+ {file = "regex-2024.9.11-cp311-cp311-win32.whl", hash = "sha256:18e707ce6c92d7282dfce370cd205098384b8ee21544e7cb29b8aab955b66fa9"},
+ {file = "regex-2024.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:313ea15e5ff2a8cbbad96ccef6be638393041b0a7863183c2d31e0c6116688cf"},
+ {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b0d0a6c64fcc4ef9c69bd5b3b3626cc3776520a1637d8abaa62b9edc147a58f7"},
+ {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:49b0e06786ea663f933f3710a51e9385ce0cba0ea56b67107fd841a55d56a231"},
+ {file = "regex-2024.9.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5b513b6997a0b2f10e4fd3a1313568e373926e8c252bd76c960f96fd039cd28d"},
+ {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee439691d8c23e76f9802c42a95cfeebf9d47cf4ffd06f18489122dbb0a7ad64"},
+ {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8f877c89719d759e52783f7fe6e1c67121076b87b40542966c02de5503ace42"},
+ {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23b30c62d0f16827f2ae9f2bb87619bc4fba2044911e2e6c2eb1af0161cdb766"},
+ {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ab7824093d8f10d44330fe1e6493f756f252d145323dd17ab6b48733ff6c0a"},
+ {file = "regex-2024.9.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dee5b4810a89447151999428fe096977346cf2f29f4d5e29609d2e19e0199c9"},
+ {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98eeee2f2e63edae2181c886d7911ce502e1292794f4c5ee71e60e23e8d26b5d"},
+ {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:57fdd2e0b2694ce6fc2e5ccf189789c3e2962916fb38779d3e3521ff8fe7a822"},
+ {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d552c78411f60b1fdaafd117a1fca2f02e562e309223b9d44b7de8be451ec5e0"},
+ {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a0b2b80321c2ed3fcf0385ec9e51a12253c50f146fddb2abbb10f033fe3d049a"},
+ {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:18406efb2f5a0e57e3a5881cd9354c1512d3bb4f5c45d96d110a66114d84d23a"},
+ {file = "regex-2024.9.11-cp312-cp312-win32.whl", hash = "sha256:e464b467f1588e2c42d26814231edecbcfe77f5ac414d92cbf4e7b55b2c2a776"},
+ {file = "regex-2024.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:9e8719792ca63c6b8340380352c24dcb8cd7ec49dae36e963742a275dfae6009"},
+ {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c157bb447303070f256e084668b702073db99bbb61d44f85d811025fcf38f784"},
+ {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4db21ece84dfeefc5d8a3863f101995de646c6cb0536952c321a2650aa202c36"},
+ {file = "regex-2024.9.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:220e92a30b426daf23bb67a7962900ed4613589bab80382be09b48896d211e92"},
+ {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1ae19e64c14c7ec1995f40bd932448713d3c73509e82d8cd7744dc00e29e86"},
+ {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f47cd43a5bfa48f86925fe26fbdd0a488ff15b62468abb5d2a1e092a4fb10e85"},
+ {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9d4a76b96f398697fe01117093613166e6aa8195d63f1b4ec3f21ab637632963"},
+ {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ea51dcc0835eea2ea31d66456210a4e01a076d820e9039b04ae8d17ac11dee6"},
+ {file = "regex-2024.9.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7aaa315101c6567a9a45d2839322c51c8d6e81f67683d529512f5bcfb99c802"},
+ {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c57d08ad67aba97af57a7263c2d9006d5c404d721c5f7542f077f109ec2a4a29"},
+ {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8404bf61298bb6f8224bb9176c1424548ee1181130818fcd2cbffddc768bed8"},
+ {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dd4490a33eb909ef5078ab20f5f000087afa2a4daa27b4c072ccb3cb3050ad84"},
+ {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:eee9130eaad130649fd73e5cd92f60e55708952260ede70da64de420cdcad554"},
+ {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a2644a93da36c784e546de579ec1806bfd2763ef47babc1b03d765fe560c9f8"},
+ {file = "regex-2024.9.11-cp313-cp313-win32.whl", hash = "sha256:e997fd30430c57138adc06bba4c7c2968fb13d101e57dd5bb9355bf8ce3fa7e8"},
+ {file = "regex-2024.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:042c55879cfeb21a8adacc84ea347721d3d83a159da6acdf1116859e2427c43f"},
+ {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:35f4a6f96aa6cb3f2f7247027b07b15a374f0d5b912c0001418d1d55024d5cb4"},
+ {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:55b96e7ce3a69a8449a66984c268062fbaa0d8ae437b285428e12797baefce7e"},
+ {file = "regex-2024.9.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb130fccd1a37ed894824b8c046321540263013da72745d755f2d35114b81a60"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:323c1f04be6b2968944d730e5c2091c8c89767903ecaa135203eec4565ed2b2b"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be1c8ed48c4c4065ecb19d882a0ce1afe0745dfad8ce48c49586b90a55f02366"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5b029322e6e7b94fff16cd120ab35a253236a5f99a79fb04fda7ae71ca20ae8"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6fff13ef6b5f29221d6904aa816c34701462956aa72a77f1f151a8ec4f56aeb"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:587d4af3979376652010e400accc30404e6c16b7df574048ab1f581af82065e4"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:079400a8269544b955ffa9e31f186f01d96829110a3bf79dc338e9910f794fca"},
+ {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f9268774428ec173654985ce55fc6caf4c6d11ade0f6f914d48ef4719eb05ebb"},
+ {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:23f9985c8784e544d53fc2930fc1ac1a7319f5d5332d228437acc9f418f2f168"},
+ {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2941333154baff9838e88aa71c1d84f4438189ecc6021a12c7573728b5838e"},
+ {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e93f1c331ca8e86fe877a48ad64e77882c0c4da0097f2212873a69bbfea95d0c"},
+ {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:846bc79ee753acf93aef4184c040d709940c9d001029ceb7b7a52747b80ed2dd"},
+ {file = "regex-2024.9.11-cp38-cp38-win32.whl", hash = "sha256:c94bb0a9f1db10a1d16c00880bdebd5f9faf267273b8f5bd1878126e0fbde771"},
+ {file = "regex-2024.9.11-cp38-cp38-win_amd64.whl", hash = "sha256:2b08fce89fbd45664d3df6ad93e554b6c16933ffa9d55cb7e01182baaf971508"},
+ {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:07f45f287469039ffc2c53caf6803cd506eb5f5f637f1d4acb37a738f71dd066"},
+ {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4838e24ee015101d9f901988001038f7f0d90dc0c3b115541a1365fb439add62"},
+ {file = "regex-2024.9.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6edd623bae6a737f10ce853ea076f56f507fd7726bee96a41ee3d68d347e4d16"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c69ada171c2d0e97a4b5aa78fbb835e0ffbb6b13fc5da968c09811346564f0d3"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02087ea0a03b4af1ed6ebab2c54d7118127fee8d71b26398e8e4b05b78963199"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:69dee6a020693d12a3cf892aba4808fe168d2a4cef368eb9bf74f5398bfd4ee8"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297f54910247508e6e5cae669f2bc308985c60540a4edd1c77203ef19bfa63ca"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecea58b43a67b1b79805f1a0255730edaf5191ecef84dbc4cc85eb30bc8b63b9"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eab4bb380f15e189d1313195b062a6aa908f5bd687a0ceccd47c8211e9cf0d4a"},
+ {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0cbff728659ce4bbf4c30b2a1be040faafaa9eca6ecde40aaff86f7889f4ab39"},
+ {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:54c4a097b8bc5bb0dfc83ae498061d53ad7b5762e00f4adaa23bee22b012e6ba"},
+ {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:73d6d2f64f4d894c96626a75578b0bf7d9e56dcda8c3d037a2118fdfe9b1c664"},
+ {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:e53b5fbab5d675aec9f0c501274c467c0f9a5d23696cfc94247e1fb56501ed89"},
+ {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ffbcf9221e04502fc35e54d1ce9567541979c3fdfb93d2c554f0ca583a19b35"},
+ {file = "regex-2024.9.11-cp39-cp39-win32.whl", hash = "sha256:e4c22e1ac1f1ec1e09f72e6c44d8f2244173db7eb9629cc3a346a8d7ccc31142"},
+ {file = "regex-2024.9.11-cp39-cp39-win_amd64.whl", hash = "sha256:faa3c142464efec496967359ca99696c896c591c56c53506bac1ad465f66e919"},
+ {file = "regex-2024.9.11.tar.gz", hash = "sha256:6c188c307e8433bcb63dc1915022deb553b4203a70722fc542c363bf120a01fd"},
+]
+
+[[package]]
+name = "requests"
+version = "2.32.3"
+description = "Python HTTP for Humans."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"},
+ {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"},
+]
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+charset-normalizer = ">=2,<4"
+idna = ">=2.5,<4"
+urllib3 = ">=1.21.1,<3"
+
+[package.extras]
+socks = ["PySocks (>=1.5.6,!=1.5.7)"]
+use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
+
+[[package]]
+name = "rsa"
+version = "4.7.2"
+description = "Pure-Python RSA implementation"
+optional = false
+python-versions = ">=3.5, <4"
+files = [
+ {file = "rsa-4.7.2-py3-none-any.whl", hash = "sha256:78f9a9bf4e7be0c5ded4583326e7461e3a3c5aae24073648b4bdfa797d78c9d2"},
+ {file = "rsa-4.7.2.tar.gz", hash = "sha256:9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9"},
+]
+
+[package.dependencies]
+pyasn1 = ">=0.1.3"
+
+[[package]]
+name = "s3transfer"
+version = "0.10.2"
+description = "An Amazon S3 Transfer Manager"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "s3transfer-0.10.2-py3-none-any.whl", hash = "sha256:eca1c20de70a39daee580aef4986996620f365c4e0fda6a86100231d62f1bf69"},
+ {file = "s3transfer-0.10.2.tar.gz", hash = "sha256:0711534e9356d3cc692fdde846b4a1e4b0cb6519971860796e6bc4c7aea00ef6"},
+]
+
+[package.dependencies]
+botocore = ">=1.33.2,<2.0a.0"
+
+[package.extras]
+crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"]
+
+[[package]]
+name = "six"
+version = "1.16.0"
+description = "Python 2 and 3 compatibility utilities"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+files = [
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
+]
+
+[[package]]
+name = "smmap"
+version = "5.0.1"
+description = "A pure Python implementation of a sliding window memory map manager"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "smmap-5.0.1-py3-none-any.whl", hash = "sha256:e6d8668fa5f93e706934a62d7b4db19c8d9eb8cf2adbb75ef1b675aa332b69da"},
+ {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"},
+]
+
+[[package]]
+name = "tinycss2"
+version = "1.3.0"
+description = "A tiny CSS parser"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "tinycss2-1.3.0-py3-none-any.whl", hash = "sha256:54a8dbdffb334d536851be0226030e9505965bb2f30f21a4a82c55fb2a80fae7"},
+ {file = "tinycss2-1.3.0.tar.gz", hash = "sha256:152f9acabd296a8375fbca5b84c961ff95971fcfc32e79550c8df8e29118c54d"},
+]
+
+[package.dependencies]
+webencodings = ">=0.4"
+
+[package.extras]
+doc = ["sphinx", "sphinx_rtd_theme"]
+test = ["pytest", "ruff"]
+
+[[package]]
+name = "urllib3"
+version = "2.2.3"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"},
+ {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"},
+]
+
+[package.extras]
+brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
+h2 = ["h2 (>=4,<5)"]
+socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
+zstd = ["zstandard (>=0.18.0)"]
+
+[[package]]
+name = "watchdog"
+version = "3.0.0"
+description = "Filesystem events monitoring"
+optional = false
+python-versions = ">=3.7"
+files = [
+ {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"},
+ {file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"},
+ {file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"},
+ {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"},
+ {file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"},
+ {file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"},
+ {file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"},
+ {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"},
+ {file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"},
+ {file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"},
+ {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"},
+ {file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"},
+ {file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"},
+ {file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"},
+ {file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"},
+ {file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"},
+ {file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"},
+ {file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"},
+ {file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"},
+ {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"},
+ {file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"},
+ {file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"},
+ {file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"},
+ {file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"},
+ {file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"},
+ {file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"},
+ {file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"},
+]
+
+[package.extras]
+watchmedo = ["PyYAML (>=3.10)"]
+
+[[package]]
+name = "webencodings"
+version = "0.5.1"
+description = "Character encoding aliases for legacy web content"
+optional = false
+python-versions = "*"
+files = [
+ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"},
+ {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"},
+]
+
+[metadata]
+lock-version = "2.0"
+python-versions = "^3.11"
+content-hash = "b6178454e70e6c0e8e619c2802597c414d02bb21ab3b8b8162e069e6d1335fb2"
diff --git a/poetry.toml b/poetry.toml
new file mode 100644
index 0000000..ab1033b
--- /dev/null
+++ b/poetry.toml
@@ -0,0 +1,2 @@
+[virtualenvs]
+in-project = true
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000..5413623
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,20 @@
+[tool.poetry]
+name = "security-guides"
+version = "202409.23"
+description = "For CSO guidebook in security."
+authors = ["Shield of Self-Defense (ocf.tw) "]
+readme = "README.md"
+package-mode = false
+
+[tool.poetry.dependencies]
+python = "^3.11"
+mkdocs-material = {extras = ["imaging"], version = "^9.5.36"}
+watchdog = "^3.0"
+boto3 = "^1.34.94"
+awscli = "^1.32.94"
+mkdocs-git-revision-date-localized-plugin = "^1.2.9"
+
+
+[build-system]
+requires = ["poetry-core"]
+build-backend = "poetry.core.masonry.api"