# Phala / Intel TDX · উচ্চ-আশ্বাসজনক মোতায়েন

Canonical page: https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/

Hetzner বা Phala Cloud-এ সিল করা ২৪/৭ সার্ভার, Gateway DNS এবং তৃতীয় পক্ষ পুনরায় যাচাই করতে পারে এমন চেকসমূহ।

[Project context and measured scale](https://phishdestroy.github.io/TgWitness/docs/reference/overview/)

[Documentation index](https://phishdestroy.github.io/TgWitness/bn/llms.txt)

Translation coverage: this edition includes material from the English original.

Hetzner বা Phala Cloud-এ সিল করা ২৪/৭ সার্ভার, Gateway DNS এবং তৃতীয় পক্ষ পুনরায় যাচাই করতে পারে এমন চেকসমূহ।

[টিজিউইটনেস](https://github.com/phishdestroy/TgWitness/blob/main/README.md) / [ডকুমেন্টেশন](https://github.com/phishdestroy/TgWitness/blob/main/docs/README.md) · [নিয়োগ এবং পুনরুদ্ধার](https://phishdestroy.github.io/TgWitness/bn/docs/reference/deployment/)

![নিয়োগ ও পুনরুদ্ধার](https://phishdestroy.github.io/TgWitness/assets/chapter-operate.svg)

উচ্চ-আশ্বাসজনক মোতায়েন সংগ্রহ পরিবেশের স্বতন্ত্র যাচাইকরণ যোগ করে আর্কাইভ যাচাইকরণে। পর্যালোচক ক্লাউড প্রদানকারী এবং Cloudflare-এ সংরক্ষিত মোতায়েন ও অ্যাক্সেস রেকর্ডগুলো অনুসন্ধান করেন, এবং একটি Intel TDX মোতায়েন সংগ্রাহকের পরিবেশের হার্ডওয়্যার প্রত্যয়ন যোগ করে।

সাধারণ স্থানীয় এবং Docker ব্যবহার অপরিবর্তিত রয়েছে। এখানে কিছুই চলে না যদি না আপনি সাথে ডিপ্লয় করেন `python -m tgwitness.cloud`, এবং কালেক্টর তার হোস্ট শুধুমাত্র তখনই পড়ে যখন ডিপ্লয়মেন্ট সেট করে `TGWITNESS_ASSURANCE`.

প্রবাহ চিত্র · অপারেটর → সার্ভার, ইনবাউন্ড নিয়মবিহীন ফায়ারওয়াল (প্রোভাইডার API); অপারেটর → টানেল এবং DNS (ক্লাউডফ্লেয়ার API); সার্ভার, ইনবাউন্ড নিয়মবিহীন ফায়ারওয়াল → টানেল এবং DNS (শুধুমাত্র আউটবাউন্ড); সার্ভার, ইনবাউন্ড নিয়মবিহীন ফায়ারওয়াল → সার্ভারে তৈরি স্বাক্ষর কী; যাচাইকারী, শুধুমাত্র পড়ার টোকেন → প্রোভাইডার লগ এবং ফায়ারওয়াল; যাচাইকারী, শুধুমাত্র পড়ার টোকেন → টানেল সংযোগকারীর ঠিকানা এবং প্রবেশ; যাচাইকারী, শুধুমাত্র পড়ার টোকেন → স্বাক্ষরিত /api/assurance বিবৃতি; যাচাইকারী, শুধুমাত্র পড়ার টোকেন → প্রমাণ ZIP · অপারেটর · যাচাইকারী, শুধুমাত্র পড়ারটোকেন · সার্ভার, ইনবাউন্ডনিয়মবিহীন ফায়ারওয়াল · প্রোভাইডার লগ এবংফায়ারওয়াল · টানেল সংযোগকারীর ঠিকানাএবং প্রবেশ · স্বাক্ষরিত /api/assuranceবিবৃতি · প্রমাণ ZIP · টানেল এবং DNS · সার্ভারে তৈরি স্বাক্ষর কী · প্রোভাইডার API · ক্লাউডফ্লেয়ার API · শুধুমাত্র আউটবাউন্ড

**ডায়াগ্রাম টেক্সট হিসেবে**

1. অপারেটর → সার্ভার, ইনবাউন্ড নিয়মবিহীন ফায়ারওয়াল (প্রোভাইডার API)
2. অপারেটর → টানেল এবং DNS (ক্লাউডফ্লেয়ার API)
3. সার্ভার, ইনবাউন্ড নিয়মবিহীন ফায়ারওয়াল → টানেল এবং DNS (শুধুমাত্র আউটবাউন্ড)
4. সার্ভার, ইনবাউন্ড নিয়মবিহীন ফায়ারওয়াল → সার্ভারে তৈরি স্বাক্ষর কী
5. যাচাইকারী, শুধুমাত্র পড়ার টোকেন → প্রোভাইডার লগ এবং ফায়ারওয়াল
6. যাচাইকারী, শুধুমাত্র পড়ার টোকেন → টানেল সংযোগকারীর ঠিকানা এবং প্রবেশ
7. যাচাইকারী, শুধুমাত্র পড়ার টোকেন → স্বাক্ষরিত /api/assurance বিবৃতি
8. যাচাইকারী, শুধুমাত্র পড়ার টোকেন → প্রমাণ ZIP

**এই পৃষ্ঠায়**

- [একজন যাচাইকারী যা যাচাই করতে পারে](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#what-a-verifier-can-check)
- [প্রদানকারীরা](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#providers)
- [ফালা ক্লাউডে গোপনীয় ভার্চুয়াল মেশিন (Intel TDX)](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#confidential-vm-on-phala-cloud-intel-tdx)
- [শুরু করার আগে](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#before-you-start)
- [প্যানেল থেকে](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#from-the-panel)
- [ডোমেইন ছাড়া দ্রুত টানেল](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#quick-tunnel-without-a-domain)
- [মোতায়েন](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#deploy)
- [ত্রুটি নির্মূল, মোতায়েন এবং লক](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#debug-deployment-and-lock)
- [একটি মোতায়েন অপসারণ করুন](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#remove-a-deployment)
- [যে কোনো সার্ভার (নিজেই প্রত্যয়িত)](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#any-server-self-attested)
- [যাচাই করুন](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#verify)
- [প্রমাণ হস্তান্তরের প্রতিবেদন](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#report-for-evidence-handover)
- [বাইরের সাক্ষী হিসেবে ক্লাউডফ্লেয়ার](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#cloudflare-as-an-outside-witness)
- [নিয়োগের ফলাফল পড়া](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#reading-the-deployment-result)

## একজন যাচাইকারী যা যাচাই করতে পারে

| দাবি | এটি কীভাবে যাচাই করা হয় | রক্ষণাবেক্ষণ করে |
| --- | --- | --- |
| সার্ভারটি একটি নির্দিষ্ট সময়ে প্রদানকারীর API-এর মাধ্যমে তৈরি করা হয়েছিল। | প্রোভাইডারের নিজস্ব লগে সার্ভার অবজেক্ট এবং এর সৃষ্টি | প্রদানকারী |
| কেউই প্রদানকারীর অ্যাক্সেস পথ ব্যবহার করেনি | কনসোল অনুরোধ, উদ্ধার, পাসওয়ার্ড রিসেট, পুনর্নির্মাণ, ISO, ইমেজ, ব্যাকআপ-এর লগ | প্রদানকারী |
| কিছুই এর সাথে সংযুক্ত হতে পারেনি | প্রোভাইডার ফায়ারওয়ালে কোনো ইনবাউন্ড নিয়ম নেই; প্রথম বুট থেকেই SSH লুকানো থাকে। | প্রদানকারী (ফায়ারওয়াল), হোস্ট (SSH) |
| প্যানেলটি শুধুমাত্র টানেলের মাধ্যমেই পৌঁছানো যায় | টুনেল প্রবেশ প্যানেলের কাছে এককভাবে ফরওয়ার্ড করে; কানেক্টর সার্ভারের ঠিকানা থেকে চলে | ক্লাউডফ্লেয়ার |
| এই নির্দিষ্ট সফটওয়্যারটি চলে | সংগ্রাহকের স্বাক্ষরিত সোর্স-ট্রি হ্যাশ মোতায়েনকৃত কমিটের চেকআউটের সমান। | কলেক্টর, গিটের বিরুদ্ধে যাচাইকৃত |
| স্বাক্ষর কীটি ঐ সার্ভারে তৈরি করা হয়েছিল | কী প্রদানকারীর সার্ভার আইডি এবং প্রাপ্ত ক্লাউড-ইনિટের হ্যাশের নাম উল্লেখ করে একটি বিবৃতি স্বাক্ষর করে। | প্রোভাইডারের বিরুদ্ধে যাচাইকৃত কালেক্টর |
| জার্নালটি সেই কী এবং সার্ভারের অন্তর্গত | প্রত্যেক প্রক্রিয়া প্রমাণপত্রের ZIP-এ শুরু হয়, যা সেই সার্ভারের হোস্ট পরিমাপ বহন করে। | প্রমাণ ZIP |

সংগ্রাহক স্বাক্ষরিত process-start এবং `host.state` রেকর্ডে SSH অবস্থা, সেশন, লগইন ইতিহাস এবং বুট তথ্য রেকর্ড করে। একটি সাধারণ VM-এ এগুলো স্থানীয় ইনভেন্টরি রেকর্ড, যেগুলো পর্যালোচক প্রদানকারীর স্বতন্ত্র রেকর্ডের সাথে তুলনা করে। নিচের Intel TDX মোতায়েন অতিরিক্তভাবে হার্ডওয়্যার-সমর্থিত পরিমাপ যাচাই করে।

## প্রদানকারীরা

| `--provider` | প্রমাণপত্র | যাচাইকারীর শুধুমাত্র পড়ার অ্যাক্সেস | যাচাইকারীর জন্য প্রদানকারীর লগ | রক্ষার জন্য |
| --- | --- | --- | --- | --- |
| `hetzner` | `HCLOUD_TOKEN` | একই প্রকল্পের টোকেন পড়ুন | সার্ভার এবং ফায়ারওয়াল কার্যক্রম | যখন সম্পদগুলো বিদ্যমান |
| `digitalocean` | `DIGITALOCEAN_TOKEN` | শুধুমাত্র-পঠনযোগ্য ব্যক্তিগত অ্যাক্সেস টোকেন | ড্রপলেট অ্যাকশনসমূহ | যখন ড্রপলেট বিদ্যমান থাকে |
| `linode` | `LINODE_TOKEN` | `linodes`, `firewall`, `events` শুধুমাত্র-পঠনযোগ্য স্কোপসমূহ | অ্যাকাউন্ট ইভেন্ট, ফায়ারওয়াল নিয়মের সংস্করণ | ৯০ দিন |
| `vultr` | `VULTR_API_KEY` | পড়ার অনুমতি সহ ব্যবহারকারী এবং `activity_logs` অনুমতি | অ্যাকাউন্ট কার্যকলাপ লগ (পদ্ধতি, পথ, অভিনেত্রী) | ৩০ দিন, অডিট-লগ সাবস্ক্রিপশন থাকলে আরও দীর্ঘ |
| `aws` | `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` | `ec2:DescribeInstances`, `ec2:DescribeSecurityGroups`, `cloudtrail:LookupEvents` | CloudTrail ইভেন্ট ইতিহাস | ৯০ দিন |
| `phala` | `PHALA_CLOUD_API_KEY` | একই ওয়ার্কস্পেসের একটি API কী | অ্যাপ্লিকেশন সংশোধন এবং CVM অপারেশন: Docker Compose কনফিগারেশন ও পরিবেশ পরিবর্তন, পুনঃশুরু, OS আপগ্রেড | অ্যাপ্লিকেশনটি বিদ্যমান থাকা অবস্থায় |
| `generic` | কোনও নেই | কোনও নেই | কোনও নেই: **স্ব-প্রত্যয়িত** | – |

প্রতিটি মামলার জন্য একটি নিবেদিত প্রকল্প, দল, অ্যাকাউন্ট বা সাব-অ্যাকাউন্ট ব্যবহার করুন: যাচাইকারীর শুধুমাত্র-পঠন (read-only) অ্যাক্সেস তখন শুধুমাত্র এই ডিপ্লয়মেন্ট দেখাবে। শংসাপত্রগুলি থেকে পড়া হয় `--provider-token-file` অথবা উপরের ভেরিয়েবল, কখনই কমান্ড লাইন থেকে নয়। AWS-এর জন্য ফাইলটি ধারণ করে `ACCESS_KEY_ID SECRET_ACCESS_KEY [SESSION_TOKEN]`; অঞ্চলটি `--location`.

প্রত্যেক প্রদানকারীর রেকর্ড যা দেখাতে পারে না, তা প্রতিটি রিপোর্টে মুদ্রিত হয়। সংক্ষেপে: Hetzner কনসোল অনুরোধ লগ করে; DigitalOcean-এর রিকভারি কনসোল, Linode-এর Lish/Glish এবং Vultr-এর ওয়েব কনসোল এভাবে লগ করা হয় না, তাই প্রথম বুটে রুট লক থাকে এবং কনসোল লগইন করতে পাসওয়ার্ড রিসেট বা বুট পরিবর্তন করতে হয়, যা লগ করা হয়। Vultr ইনস্ট্যান্স পড়তে সক্ষম যেকোনো কী-কে কনসোল ঠিকানা ফেরত দেয়; রেকর্ড বা রিপোর্ট কোনোটিই এটি সংরক্ষণ করে না।

## ফালা ক্লাউডে গোপনীয় ভার্চুয়াল মেশিন (Intel TDX)

সহ `--provider phala` কলেক্টর dstack দ্বারা পরিচালিত [Phala](https://phala.com/)Cloud-এ একটি Intel TDX কনফিডেনশিয়াল ভার্চুয়াল মেশিনে চলে। হোস্ট এবং Phala-র কর্মীরা এর মেমোরি পড়তে পারে না, এবং প্রসেসর মেশিনটি কী বুট করেছে তার একটি প্রত্যয়ন স্বাক্ষর করে। যাচাইকারী Phala-র কথা বিশ্বাস করে না: `tgwitness.tdx` প্রতিবারই প্রতিটি প্রত্যয়ন নিজে যাচাই করে, পিন করা Intel SGX রুট সিএ পর্যন্ত, Intel-এর বাতিল তালিকা এবং Intel-এর স্বাক্ষরিত প্ল্যাটফর্ম ডেটার বিরুদ্ধে, এবং ডিবাগ বা মাইগ্রেট করা যায় এমন মেশিনগুলোকে প্রত্যাখ্যান করে।

| রিপোর্ট এন্ট্রি | এটি যা দেখায় |
| --- | --- |
| `tdx_binding` | এই প্রত্যয়নপত্রটি সংগ্রাহকের স্বাক্ষরিত বিবৃতি এবং এই অনুরোধের এলোমেলো মানকে অন্তর্ভুক্ত করে। |
| `tdx_quote` | ইন্টেল এই প্রত্যয়নপত্রের নিশ্চয়তা প্রদান করে; এটি কেবল তখনই পাস হয় যখন ইন্টেল প্ল্যাটফর্মটিকে হালনাগাদ হিসেবে মূল্যায়ন করে। |
| `tdx_compose_hash` | RTMR3, dstack ইভেন্ট লগ থেকে পুনরায় প্লে করা, অ্যাপ-কম্পোজ পরিমাপ করে যা কালেক্টর রিপোর্ট করে |
| `tdx_compose` | সেই কম্পোজ বাইটে বাইটে ঠিক সেই একই, যা ডিপ্লয় করা কমিটের কোড তৈরি করে: হ্যাশ অনুযায়ী পিন করা সোর্স ফাইল, উভয় ইমেজ ডাইজেস্ট অনুযায়ী, অন্য কোনো কোড নেই। |
| `tdx_identity` | সত্যায়ন আসে মোতায়েনকৃত অ্যাপ্লিকেশন ও ইনস্ট্যান্স থেকে, Phala-এর KMS-এর কী এবং এনক্রিপ্ট করা ডিস্কের মাধ্যমে। |
| `tdx_os` | MRTD এবং RTMR0-2 সেই মানগুলোর সমান যা যাচাইকারী dstack OS ইমেজ থেকে হিসাব করে, যা Dstack-TEE প্রকাশ করে, CVM রিপোর্টকৃত OS ইমেজ হ্যাশের মাধ্যমে খুঁজে পাওয়া যায়, এবং VM-এর আকৃতির জন্য QEMU তৈরি করা ACPI টেবিল থেকে: ফার্মওয়্যার, কার্নেল, ইনিত্রডি, রুট ফাইল সিস্টেম হ্যাশসহ কমান্ড লাইন, মেমোরি, vCPU এবং ডিভাইসসমূহ। একটি ডেভেলপমেন্ট ইমেজ ব্যর্থ হয় |

The OS image (about 180 MB, of which 21 MB are kept) is downloaded once from [Dstack-TEE/meta-dstack](https://github.com/Dstack-TEE/meta-dstack/releases) into `dstack-images` beside the record; `--tdx-image FOLDER` uses another folder or an unpacked image, `--tdx-image none` skips the comparison. The measurement follows `dstack-mr` and the `qemu-acpi` crate of Dstack-TEE/dstack. Private measurement regressions compare QEMU's own ACPI output and a retained Phala Cloud quote; live qualification also needs the published image. `--tdx-measurements` still compares MRTD and RTMR0-2 given as JSON instead.

জার্নালে রেকর্ডকৃত প্রতিটি কালেক্টরের শুরুতে এমন একটি প্রত্যয়ন থাকে, তাই `verify --evidence` প্রতিটি শুরু এবং এটি বুট করা OS ইমেজ পরীক্ষা করে। Phala-এর অ্যাপ্লিকেশন সংশোধনসমূহ এবং CVM-এর অপারেশনসমূহ প্রদানকারী লগ হিসেবে কাজ করে: ডিসপ্লয়মেন্টের পর পরিবর্তিত একটি Docker Compose কনফিগারেশন রিপোর্টে ব্যর্থ হয় এবং পর্যালোচনার জন্য পুনঃশুরুসমূহ তালিকাভুক্ত করা হয়।

প্যানেলে **Extras** → **Server 24/7-এর** অধীনে **Confidential virtual machine · Phala Cloud** নির্বাচন করুন এবং একটি Phala Cloud API কী পেস্ট করুন; কুইক টানেল Hetzner-এ যেমন কাজ করে, এখানেও তেমনই কাজ করে। কমান্ড লাইন থেকে:

```
python -m tgwitness.cloud deploy --provider phala --name case-1 --server-type tdx.small \
    --ref v0.8.0 --repository https://github.com/phishdestroy/TgWitness --quick-tunnel \
    --provider-token-file phala-key.txt
python -m tgwitness.cloud verify --record deployments/case-1/deployment.json \
    --provider-token-file phala-key.txt --cloud-init deployments/case-1/docker-compose.yaml \
    --source CHECKOUT_OF_COMMIT --fingerprint COLLECTOR_FINGERPRINT --report certificate.md
python -m tgwitness.cloud check-report --report certificate.pdf --verifier-fingerprint VERIFIER_KEY
```

`--tdx-collateral` Intel-এর সার্টিফিকেট এবং বাতিল তালিকা ফাইল থেকে পড়ে, Intel থেকে ডাউনলোড করার পরিবর্তে। এখানে Gateway DNS উপলব্ধ নয়: Phala-এর আউটগোয়িং ট্র্যাফিকের জন্য কোনো প্রদানকারী ফায়ারওয়াল নেই।

### প্রত্যয়নপত্র

Phala Deployment-এর জন্য `verify --report certificate.md` সার্টিফিকেটও লেখে: a স্বয়ংসম্পূর্ণ `certificate.html` এবং একটি A4 `certificate.pdf` ফলাফলসহ, বিশ্বাসের শৃঙ্খলা Intel-এর রুট থেকে কালেক্টর কী পর্যন্ত, সাধারণ এবং উচ্চ-আশ্বাসকারী সার্ভারের সাথে তুলনা, প্রকাশিত ইমেজ থেকে গণনা করা মানগুলির পাশে পরিমাপগুলি, প্রতিটি অংশের জন্য কে দায়বদ্ধ, Intel সার্টিফিকেট চেইন, প্রতিটি যাচাইকরণ, প্রদানকারীর লগ, এবং যাচাইকরণ পুনরায় করার পদ্ধতি। JSON রিপোর্টই কর্তৃপক্ষিক রেকর্ড হিসেবে থাকে; পৃষ্ঠাগুলো এটি প্রদর্শন করে।

রিপোর্টটি `certificate.seal.json` এবং এর পাশের `.tsq`/`.tsr` ফাইলগুলোতে স্বাক্ষর ও সময়-স্ট্যাম্পসহ ডিজিটালি সিল করা হয়েছে:

| সিল | এটি যা যোগ করে |
| --- | --- |
| যোগ্য ইলেকট্রনিক টাইম স্ট্যাম্প, `http://tsa.belgium.be/connect` | বেলজিয়ান ফেডারেল সরকারের যোগ্য ট্রাস্ট সার্ভিস প্রদানকারী (FPS Policy and Support, BOSA) থেকে প্রাপ্ত `certificate.json`-এর সঠিক বাইটগুলোর উপর RFC 3161 টাইমস্ট্যাম্প। এর ইউনিটটি বেলজিয়ামের EU বিশ্বস্ত তালিকায় 'যোগ্য সময়-স্ট্যাম্পিং পরিষেবা' হিসেবে অনুমোদিত অবস্থায় তালিকাভুক্ত; রুট (Belgium Root CA6) এবং তালিকার এন্ট্রিগুলো, 20 অক্টোবর 2026-এ জারি হওয়া তালিকা অনুযায়ী, `tgwitness/tsa_roots.py`-এ পিন করা আছে। নিয়মাবলী (EU) নং 910/2014-এর ধারা 41 অনুযায়ী, প্রতিটি EU সদস্য রাষ্ট্রে এমন একটি টাইমস্ট্যাম্প তারিখ ও সময় এবং তথ্যের অখণ্ডতার দিক থেকে সঠিক বলে অনুমান করা হয়। |
| RFC 3161 টাইমস্ট্যাম্প, FreeTSA | একটি দ্বিতীয়, স্বতন্ত্র টাইমস্ট্যাম্প |
| যাচাইকারী স্বাক্ষর | প্রতিবেদনটির SHA-256 এবং প্রতিটি টাইমস্ট্যাম্পের নাম উল্লেখ করে একটি বিবৃতিতে Ed25519 এনক্রিপশন করা হয়, যা যাচাইকারীর নিজস্ব কী (`--sign-with FOLDER`, ডিফল্ট `~/.tgwitness/verifier`) দিয়ে স্বাক্ষরিত; PDF-এ একই কী দিয়ে স্বাক্ষর অন্তর্ভুক্ত থাকে |

`--timestamp URL` (পুনরায়যোগ্য) অন্যান্য কর্তৃপক্ষ নির্বাচন করে, `--timestamp none` কিছুই নির্বাচন করে না, `--sign-with
none` সীল স্বাক্ষরবিহীন রাখে। `check-report` রিপোর্টের হ্যাশ, যাচাইকারীর স্বাক্ষর, প্রতিটি টাইমস্ট্যাম্পকে একটি বিশ্বস্ত রুট এবং এর যোগ্য স্থিতি, এবং PDF-এর স্বাক্ষর যাচাই করে। ইউরোপীয় ইউনিয়নের বাইরে একটি যোগ্য সময় স্ট্যাম্পের এবং সম্পূর্ণ রিপোর্টের আইনগত গুরুত্ব সেই আদালত বা কর্তৃপক্ষের উপর নির্ভর করে যেটি এটি গ্রহণ করে; সীলটি দেখায় রিপোর্টটি কখন বিদ্যমান ছিল এবং এটি পরিবর্তিত হয়নি।

একটি প্রত্যয়ন Intel-এর TDX মডিউল বা মাইক্রোকোডে ত্রুটি বা মেমরি বাসে শারীরিক প্রবেশাধিকারকে অস্বীকার করতে পারে না। Phala-এর অ্যাকাউন্টে অ্যাপ্লিকেশনটি যেই নিয়ন্ত্রণ করে, সে অন্য একটি কম্পোজ মোতায়েন করতে পারে; এটি নতুন কম্পোজ হ্যাশসহ একটি নতুন সংস্করণ হিসেবে প্রদর্শিত হবে। হোস্ট মেশিনের সময় উৎস এবং নেটওয়ার্ক নিয়ন্ত্রণ করে।

Deploy, `--evidence` দিয়ে যাচাইকরণ, পুনরায় আরম্ভ, OS ইমেজ তুলনা, স্বাক্ষর ও সময়-স্ট্যাম্পসহ ডিজিটালি সিলকৃত সার্টিফিকেট এবং ধ্বংস Phala Cloud-এ নিজেই চালানো হয়েছে; দেখুন [, ৪ নভেম্বর ২০২৬-এর run](https://phishdestroy.github.io/TgWitness/bn/docs/reference/verification/#live-phala-cloud-deployment--4-november-2026)।

## শুরু করার আগে

1. একটি Cloudflare জোন, এর অ্যাকাউন্ট আইডি, এবং একটি API টোকেন যার মধ্যে **Cloudflare Tunnel Edit**, **Zone Read** এবং **DNS Edit** অন্তর্ভুক্ত, প্রদত্ত `--cloudflare-token-file` অথবা `CLOUDFLARE_API_TOKEN` যাচাইকারীর জন্য: **Cloudflare Tunnel Read**, **DNS Read** এবং অডিট লগের জন্য **Account Settings Read**। ডোমেইন ছাড়া, একটি [কুইক টানেলের](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#quick-tunnel-without-a-domain) জন্য এর কোনোটিই প্রয়োজন নেই।
2. একটি নিবেদিত প্রকল্পে লেখার অ্যাক্সেস সহ প্রদানকারীর শংসাপত্র; `lock` একই ব্যবহার করে:

   - Hetzner: API টোকেন, পড়া ও লেখার অনুমতি সহ;
   - DigitalOcean: লেখার অনুমতি সহ ব্যক্তিগত অ্যাক্সেস টোকেন;
   - Linode: ব্যক্তিগত অ্যাক্সেস টোকেন সহ `linodes`, `firewall` এবং `events` পড়ার/লেখার স্কোপ;
   - Vultr: একটি নিবেদিত অ্যাকাউন্ট বা সাব-অ্যাকাউন্টের API কী;
   - AWS: IAM ক্রেডেনশিয়াল অনুমোদিত `ec2:DescribeVpcs`, `ec2:DescribeImages`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:RunInstances`, `ec2:CreateTags`, `ec2:DescribeInstances`, `ec2:DescribeSecurityGroupRules` এবং `ec2:RevokeSecurityGroupIngress`.
3. চালানোর জন্য commit। একটি রিলিজ ট্যাগ একবার তার commit-এ সমাধান করা হয় `git ls-remote`; সার্ভার সর্বদা শুধুমাত্র ৪০-অক্ষরের কমিটই পায়।

## প্যানেল থেকে

আপনার নিজস্ব কম্পিউটারে, **Extras → Server 24/7** একই `deploy` Hetzner-এর জন্য তিনটি ধাপে: ইউরোপ বা মার্কিন যুক্তরাষ্ট্র নির্বাচন করুন, একটি Hetzner টোকেন (রিড & রাইট) পেস্ট করুন, তারপর সার্ভারের ধরন, মাসিক মূল্য, ঠিকানা এবং প্যানেল সেই টোকেন দিয়ে যে সংস্করণ খুঁজে পেয়েছে তা পর্যালোচনা করুন। আপনি নিশ্চিত না করা পর্যন্ত কিছুই তৈরি হবে না। প্যানেল প্রতিটি ধাপ দেখায় `deploy` এটি রিপোর্ট করে, তারপর ঠিকানা, প্যানেল টোকেন এবং স্বাক্ষর কী ফিঙ্গারপ্রিন্ট দেখায়। ডোমেইন ছাড়া সার্ভার একটি [দ্রুত টানেল](https://phishdestroy.github.io/TgWitness/bn/docs/reference/high-assurance/#quick-tunnel-without-a-domain) পায়; **আপনার সার্ভার → বর্তমান ঠিকানা খুঁজুন** রিস্টার্টের পর আবার তা খুঁজে দেখায়। আপনার নিজস্ব ডোমেইনের অধীনে একটি স্থায়ী ঠিকানার জন্য, **অপশনাল · আপনার নিজস্ব ডোমেইন** খুলুন এবং একটি ক্লাউডফ্লেয়ার টোকেন যোগ করুন (প্রস্তুত করা লিঙ্কটি জোন রিড, ডিএনএস এডিট এবং ক্লাউডফ্লেয়ার টানেল এডিট নির্বাচন করে)।

টোকেনগুলো ব্রাউজার ট্যাব থেকে TgWitness পর্যন্ত একই কম্পিউটারে প্রতিটি অনুরোধের সাথে ভ্রমণ করে এবং কোথাও লেখা হয় না; ডিপ্লয়মেন্ট রেকর্ড, সম্পাদিত ক্লাউড-ইনিট, প্যানেল টোকেন এবং, দ্রুত টানেলের জন্য, ঠিকানা কী রাখা হয় `deployments/NAME` ডেটা ডিরেক্টরির ভিতরে। প্যানেলটি এটি শুধুমাত্র প্রধান প্রশাসককে সরাসরি লুপব্যাক সংযোগে প্রদান করে (`127.0.0.1`, কোনো প্রক্সি বা টানেল হেডার নেই); নেটওয়ার্কের মাধ্যমে সংযুক্ত প্যানেল পরিবর্তে কমান্ডগুলো দেখায়। সংস্করণটি স্বয়ংক্রিয়ভাবে চলমান প্যানেলের রিলিজ ট্যাগে সেট হয়, যা GitHub API-এর মাধ্যমে সমাধান করা হয়। অবস্থান, সার্ভারের ধরন এবং মূল্য Hetzner-এর API থেকে আসে: `cpx22` যেখানে এটি অফার করা হয়, অন্যথায় অন্তত 2 GB মেমরি সহ সবচেয়ে সস্তা x86 ধরনের।

## ডোমেইন ছাড়া দ্রুত টানেল

`--quick-tunnel` প্রতিস্থাপন করে `--zone`, `--cloudflare-account` এবং `--panel-host`; কোনো Cloudflare অ্যাকাউন্ট বা টোকেন জড়িত নয়:

```
python -m tgwitness.cloud deploy --provider hetzner --name case-2026-11 --server-type cpx22 \
    --ref 0123456789abcdef0123456789abcdef01234567 --quick-tunnel --provider-token-file hetzner.token
```

সার্ভারে, cloudflared প্যানেলের জন্য একটি [দ্রুত টানেল](https://developers.cloudflare.com/tunnel/get-started/quick-tunnels/) খুলে: একটি এলোমেলো `https://….trycloudflare.com` এটি এমন একটি ঠিকানা যা cloudflared বা সার্ভার রিস্টার্ট হলে পরিবর্তিত হয়। সার্ভারে একটি ছোট সার্ভিস প্রতিটি ঠিকানা একটি এলোমেলো ntfy.sh টপিকে পোস্ট করে, HMAC-SHA256 দিয়ে স্বাক্ষরিত একটি কী দিয়ে যা শুধুমাত্র ডিপ্লয়মেন্ট ডিরেক্টরিতে থাকে (`address-key.txt`), এবং প্রতি তিন ঘণ্টা অন্তর এটি পুনরাবৃত্তি করে কারণ ntfy.sh পোস্টগুলো ১২ ঘণ্টার জন্য সংরক্ষণ করে। `deploy` এবং **বর্তমান ঠিকানা খুঁজুন** শুধুমাত্র স্বাক্ষরিত পোস্ট গ্রহণ করে, তাই কোনো জাল পোস্ট আপনাকে এবং আপনার প্যানেল টোকেনকে অন্য কারো ঠিকানায় পাঠাতে পারবে না। টপিক রেকর্ডে এবং প্রকাশিত cloud-init-এ রয়েছে: যার কাছে এগুলো আছে সে বর্তমান ঠিকানা পড়তে পারবে, যা এখনও প্যানেল টোকেন চায়। সার্ভার কোনো ইনবাউন্ড পোর্টও রাখে না।

একজন ভেরিফায়ারের কোনো ঠিকানা কী নেই, এবং যে কেউ টপিকটি পড়তে পারে সে তাতে পোস্ট করতে পারে। তাই কালেক্টর নিজে ঠিকানাটিও পোস্ট করে, নিজস্ব Ed25519 কী দিয়ে স্বাক্ষরিত, এবং `verify` ডিপ্লয়মেন্ট রেকর্ডে কালেক্টর কী দ্বারা স্বাক্ষরিত সবচেয়ে নতুন পোস্টটি নেয়; পোস্টগুলো ntfy.sh যে সময় সেগুলো পেয়েছে সেই সময় অনুযায়ী সাজানো হয়, দাবি করা সময় অনুযায়ী নয়। এই পরিবর্তনের আগে কোনো কালেক্টরই কিছুই স্বাক্ষর করে না, এবং `verify` তারপর নতুনতম পোস্টটি নিয়ে `statement` চেকে তা উল্লেখ করে; একটি জাল পোস্ট শুধুমাত্র সেই চেকটি ব্যর্থ করতে পারে, কারণ ঠিকানাটিকে এখনও কালেক্টরের কী দিয়ে উত্তর দিতে হবে।

খরচ: কোনো Cloudflare অ্যাকাউন্ট দ্রুত টানেলের রেকর্ড রাখে না, তাই `verify` টানেল, কানেক্টর এবং DNS চেক অনুপলব্ধ হিসেবে রিপোর্ট করে এবং ফলাফল সর্বোচ্চ `incomplete` (Phala-এ Cloud চেকটি পাস করে: কানেক্টরটি পরিমাপকৃত Docker Compose কনফিগারেশনের ভিতরে চলে); প্রদানকারীর রেকর্ড, ফায়ারওয়াল, স্বাক্ষরিত বিবৃতি, হোস্ট পরিমাপ এবং ইনস্টলার তুলনা স্বাভাবিকভাবেই যাচাই করা হয়। রেফারেন্স ইনস্টলারের সাথে বাইটের তুলনার জন্য একটি মোতায়েনকৃত কমিট প্রয়োজন যা ইতিমধ্যেই `--quick-tunnel` জানে; একটি 0.7.0 চেকআউট ডোমেইন ইনস্টলার তৈরি করে এবং পার্থক্য রিপোর্ট করে। Cloudflare দ্রুত টানেল দেয়, কোনো আপটাইম গ্যারান্টি দেয় না, ফ্লাইটে ২০০টি অনুরোধের অনুমতি দেয় এবং Server-Sent Events বহন করে না, তাই প্যানেলের লাইভ আপডেট (0.7.0-এর পর সংস্করণ) হয়তো একটার মাধ্যমে পৌঁছাবে না এবং একটি ভিউ পুনরায় লোড করতে হবে; সেই অংশটি পরীক্ষা করা হয়নি। যে ক্ষেত্রে এটি টিকে থাকতে হবে, আপনার নিজস্ব ডোমেইন ব্যবহার করুন।

## মোতায়েন

প্রথমে যা কিছু পাঠানো হবে সবকিছু দেখুন। `plan` কোনও প্রদানকারী বা Cloudflare অনুরোধ করে না:

```
python -m tgwitness.cloud plan --provider hetzner --name case-2026-11 --server-type cpx22 \
    --ref 0123456789abcdef0123456789abcdef01234567 --zone example.org \
    --cloudflare-account CLOUDFLARE_ACCOUNT_ID --panel-host case.example.org
```

তারপর একই অপশন এবং ক্রেডেনশিয়ালস সহ ডিপ্লয় করুন:

```
python -m tgwitness.cloud deploy --provider hetzner --name case-2026-11 --server-type cpx22 \
    --ref 0123456789abcdef0123456789abcdef01234567 --zone example.org \
    --cloudflare-account CLOUDFLARE_ACCOUNT_ID --panel-host case.example.org \
    --witness-host case-witness.example.org \
    --provider-token-file hetzner.token --cloudflare-token-file cloudflare.token
```

শুরু করার জন্য সার্ভার প্রকার: `cpx22` (Hetzner), `s-1vcpu-2gb` (DigitalOcean), `g6-standard-1` (Linode), `vc2-1c-2gb` (Vultr), `t3.small` (AWS). `--location` এবং `--image` প্রতি প্রদানকারীর ডিফল্ট Ubuntu 24.04 ইউরোপীয় অঞ্চলে।

`--repository` অন্য একটি https Git রিপোজিটরি থেকে কমিট গ্রহণ করে, URL-এ কোনো ক্রেডেনশিয়াল ছাড়াই (ডিফল্ট `https://github.com/phishdestroy/TgWitness.git`). `deploy` এছাড়াও গ্রহণ করে `--out` অন্য একটি ডিপ্লয়মেন্ট ডিরেক্টরির জন্য (ডিফল্ট `deployments/NAME`; একটি ডিরেক্টরিতে ইতিমধ্যেই একটি ডিপ্লয়মেন্ট থাকলে তা প্রত্যাখ্যাত হয়) এবং `--wait`, কালেক্টরের স্বাক্ষরিত বিবৃতি পাওয়ার জন্য অপেক্ষার সময়: ১ থেকে ২৪০, ডিফল্ট ২০, অথবা ৬০ এর জন্য `generic`.

কমান্ড:

1. একটি Cloudflare টানেল তৈরি করে যা ইনগ্রেস প্যানেল হোস্টনেম প্যানেলের কাছে ফরওয়ার্ড করে এবং, যদি দেওয়া হয়, সাক্ষী হোস্টনেম `/api/witness/head` এবং `/api/assurance` শুধুমাত্র;
2. সেই হোস্টনামগুলির জন্য প্রক্সিযুক্ত CNAME রেকর্ড তৈরি করে, ইতিমধ্যেই বিদ্যমান নামগুলি প্রত্যাখ্যান করে;
3. ইনবাউন্ড রুল ছাড়া একটি প্রোভাইডার ফায়ারওয়াল তৈরি করে এবং এর পিছনে কোনো SSH কী, কোনো ব্যাকআপ, কোনো কনসোল এজেন্ট ছাড়া একটি সার্ভার, এবং ক্লাউড-ইনিট যা SSH লুকিয়ে রাখে, রুট লক করে, ইনস্টল করে `cloudflared`, ঠিক সেই কমিটটি আনে, তা পরীক্ষা করে এবং TgWitness-কে একটি মজবুত systemd সার্ভিস হিসেবে চালু করে;
4. সংগ্রাহকের স্বাক্ষরিত বিবৃতিটির জন্য অপেক্ষা করে এবং যাচাই করে যে এতে এই সার্ভার এবং এই cloud-init-এর হ্যাশ উল্লেখ আছে।

`deployments/case-2026-11/` তারপর ধারণ করে:

| ফাইল | সূচিপত্র | শেয়ার? |
| --- | --- | --- |
| `deployment.json` | আইডি, হ্যাশ, API কলসমূহ (মেথড, পাথ, স্ট্যাটাস) এবং প্রথম স্বাক্ষরিত বিবৃতি | হ্যাঁ, যাচাইকারীর সাথে |
| `cloud-init.redacted.yaml` | নির্দিষ্ট cloud-init, যার দুইটি গোপনীয়তা প্রতিস্থাপিত হয়েছে দ্বারা `REDACTED` | হ্যাঁ |
| `panel-token.txt` | প্যানেল টোকেন | না |

প্রভাইডারের রুট পাসওয়ার্ড, টানেল টোকেন এবং প্যানেল টোকেন কখনই লেখা হয় না `deployment.json`শেষে ছাপানো কালেক্টর ফিঙ্গারপ্রিন্টটি এমন একটি চ্যানেলের মাধ্যমে প্রকাশ করুন যা আপনি একাই নিয়ন্ত্রণ করেন না, উদাহরণস্বরূপ একটি উইটনেস চ্যানেল বা প্রাপকের কাছে একটি বার্তার মাধ্যমে।

Telegram-এ সাইন ইন করুন at `https://case.example.org` প্যানেল টোকেন ব্যবহার করে Telegram-এ সাইন ইন করুন, যেমন [অ্যাকাউন্ট](https://phishdestroy.github.io/TgWitness/bn/docs/reference/accounts/)গাইডে দেখানো হয়েছে। প্যানেল অ্যাকশনগুলো স্বাক্ষরিত জার্নালে রেকর্ড হয়; এগুলো SSH সেশন নয়। একজন [উইটনেস](https://phishdestroy.github.io/TgWitness/bn/docs/reference/witness/) পোল করতে পারে `https://case-witness.example.org`.

SSH নেই: যদি বুটস্ট্র্যাপ ব্যর্থ হয়, কালেক্টর কখনোই উত্তর দেয় না। সার্ভার মুছে ফেলে আবার ডিপ্লয় করুন, অথবা কারণ খুঁজে পেতে ডিবাগ ডিপ্লয়মেন্ট ব্যবহার করুন।

### ব্যবহারকারী ডেটার গোপন তথ্য

ক্লাউড-ইনিট দুটি গোপনীয়তা বহন করে: প্যানেল টোকেন এবং ক্লাউডফ্লেয়ার টানেল টোকেন। স্বাক্ষর কী এদের মধ্যে নেই; এটি সার্ভারে তৈরি হয়। Hetzner, DigitalOcean এবং Linode তাদের API-র মাধ্যমে ব্যবহারকারীর ডেটা ফেরত দেয় না। Vultr এটি যেকোনো কী-কে ফেরত দেয় যা ইনস্ট্যান্স পড়তে পারে, এবং EC2-এর মাধ্যমে `DescribeInstanceAttribute`. AWS-এর জন্য যাচাইকারীকে শুধুমাত্র টেবিলের তিনটি অ্যাকশন দিন, কখনই `ec2:Describe*`. Vultr-এর ক্ষেত্রে, ধরুন যাচাইকারীর কী উভয় টোকেনই পড়তে পারে। একটি টানেল টোকেন কাউকে দ্বিতীয় কানেক্টর চালানোর সুযোগ দেয়: `verify` রিপোর্ট করে সার্ভারে নেই এমন যেকোনো কানেক্টর, এবং কালেক্টরের বিবৃতিগুলো এভাবে জাল করা যায় না কারণ প্রতিটি একটি নতুন চ্যালেঞ্জ স্বাক্ষর করে। With `--quick-tunnel` দ্বিতীয় গোপনীয়তা হল ঠিকানা কী: যে কেউ এটি পড়বে, সে একটি মিথ্যা ঠিকানা পোস্ট করতে পারবে যা প্যানেল গ্রহণ করবে।

সংগ্রাহকের সর্বজনীন বিবৃতিতে সার্ভারের ঠিকানা এবং লগইনের উৎসগুলো উল্লেখ করা হয় না; উভয়ই স্বাক্ষরিত জার্নালে থাকে।

## ত্রুটি নির্মূল, মোতায়েন এবং লক

`--debug-ssh-key KEY --debug-ssh-from 198.51.100.4` একটি ঠিকানা বা ছোট নেটওয়ার্ক থেকে একটি কী-এর SSH সীমাবদ্ধ রাখে, সর্বোচ্চ IPv4-এর জন্য /24 বা IPv6-এর জন্য /48। `KEY` ইতিমধ্যেই প্রদানকারীর সাথে নিবন্ধিত: Hetzner প্রকল্পে একটি SSH কী-এর নাম বা আইডি, DigitalOcean টিমে একটি SSH কী-এর আইডি বা ফিঙ্গারপ্রিন্ট, একটি Linode ব্যবহারকারীর নাম যার প্রোফাইলে SSH কী-গুলো রুটে যোগ করা হয়েছে, Vultr অ্যাকাউন্টে একটি SSH কী-এর আইডি, অথবা অঞ্চলে একটি EC2 কী পেয়ারের নাম। এই বিকল্পগুলি প্রযোজ্য নয় `generic`. এমন একটি মোতায়েন রেকর্ড করা হয় `debug` এবং **কখনই** high-assurance হিসেবে রিপোর্ট করা হয় না। যখন আপনি শেষ করবেন, run করুন `sudo tgwitness-lock` শেষ SSH সেশনের শেষ কমান্ড হিসেবে, তারপর:

```
python -m tgwitness.cloud lock --record deployments/case-2026-11/deployment.json --provider-token-file hetzner.token
```

ফায়ারওয়াল সব ইনবাউন্ড রুল হারিয়ে ফেলে। রিপোর্টগুলো দেখায় কখন SSH অনুমোদিত ছিল এবং কখন তা বন্ধ ছিল; সেই সময়সীমা দৃশ্যমান থাকে।

## একটি ডিপ্লয়মেন্ট সরিয়ে ফেলুন

`destroy` সার্ভার এবং এর ফায়ারওয়াল মুছে ফেলে, যা ডিপ্লয়মেন্টের লেবেল দ্বারা শনাক্ত হয়, যাতে অর্ধপথে ব্যর্থ হওয়া একটি ডিপ্লয়মেন্টও মুছে যায়, তারপর এর টানেলের নির্দেশকারী DNS রেকর্ডগুলো এবং টানেলটি মুছে ফেলা হয়। সার্ভারের জার্নাল এবং সই করার কী এর সাথে মুছে ফেলা হয়: প্রথমে প্রমাণগুলো রপ্তানি করুন। রেকর্ডটি থেকে যায়, চিহ্নিত `removed`, অপসারণের API কলগুলির সাথে।

```
python -m tgwitness.cloud destroy --record deployments/case-2026-11/deployment.json --confirm case-2026-11 \
    --provider-token-file hetzner.token --cloudflare-token-file cloudflare.token
```

Hetzner-এর জন্য API-র মাধ্যমে অপসারণ বাস্তবায়িত হয়েছে। অন্যান্য প্রদানকারীর জন্য `destroy` কিছু মুছে ফেলার আগে থামে এবং প্রদানকারীর কনসোলে মুছে ফেলার লেবেলটির নাম দেখায়। একটি হাতে ইনস্টল করা সার্ভার (`generic`) শুধুমাত্র এর টানেল এবং DNS রেকর্ড হারায়। দ্রুত টানেল মোতায়েন করতে কোনো Cloudflare টোকেন প্রয়োজন হয় না: এর টানেল সার্ভারে শেষ হয়, এবং এর পোস্টগুলি ntfy.sh থেকে ১২ ঘন্টার মধ্যে মেয়াদোত্তীর্ণ হয়ে যায়।

## যে কোনো সার্ভার (স্ব-প্রত্যয়িত)

`--provider generic` ম্যানুয়ালি কেনা বা ইনস্টল করা সার্ভারের জন্য। `deploy` টানেল এবং DNS তৈরি করে, লিখে `install.sh` (প্রাইভেট) এবং `install.redacted.sh` (প্রকাশ করতে), এবং অপেক্ষা করে। কপি করুন `install.sh` একটি সদ্য ইনস্টল করা Ubuntu 24.04 সার্ভারে কপি করুন এবং সেখানে এটি চালান:

```
sudo bash install.sh
```

এটি হোস্টকে যেমন ছিল তেমনই রেকর্ড করে (লগইন, অ্যাকাউন্ট, `authorized_keys`, লিসেনিং সকেট, সার্ভিস, নির্ধারিত কাজ, প্যাকেজ), কমিট ইনস্টল করে, হোস্ট ফায়ারওয়াল সক্রিয় করে, নিজেকে মুছে ফেলে, SSH মাস্ক করে এবং সেশন শেষ করে। এমন একটি সার্ভারের রিপোর্ট সর্বোচ্চ **SELF-ATTESTED**: ইনস্টলার চালানো ব্যক্তি এর আগে রুট ছিল, এবং যাচাইকারীর জন্য কোনো প্রদানকারীর রেকর্ড উপলব্ধ নেই। এটি তবুও একটি অজানা সার্ভারের তুলনায় ভালো: ইনভেন্টরি, ইনস্টলার হ্যাশ এবং প্রতিটি পরবর্তী লগইন স্বাক্ষরিত।

## যাচাই করুন

যাচাইকারীকে প্রয়োজন `deployment.json`, প্রকাশিত ইনস্টলার, শুধুমাত্র-পঠনযোগ্য ক্রেডেনশিয়াল এবং, আদর্শভাবে, কমিটের একটি চেকআউট এবং একটি প্রমাণ ZIP:

```
git clone -c core.autocrlf=false https://github.com/phishdestroy/TgWitness.git checkout
git -C checkout checkout 0123456789abcdef0123456789abcdef01234567
python -m tgwitness.cloud verify --record deployment.json \
    --provider-token-file read-only.token --cloudflare-token-file cloudflare-read.token \
    --fingerprint COLLECTOR_FINGERPRINT --cloud-init cloud-init.redacted.yaml \
    --source checkout --evidence tgwitness-evidence.zip --report report.md
```

প্রতিটি প্রদানকারী এবং Cloudflare মান যাচাইকারী সেই মুহূর্তে অনুরোধ করে; রেকর্ডটি শুধুমাত্র জিজ্ঞাসা করার আইডিগুলো সরবরাহ করে। প্রস্থান কোড **PASS**-এর জন্য 0, **ব্যর্থ**-এর জন্য 1 এবং **পর্যালোচনা**, **অসম্পূর্ণ** বা **নিজে প্রত্যয়িত**-এর জন্য 2। `--fingerprint` এটি একটি স্বাধীন চ্যানেল থেকে আসা উচিত; তা না হলে কী শুধুমাত্র অপারেটরের রেকর্ডের সাথেই তুলনা করা হবে। `python verify.py` এখনো প্রমাণ যাচাই করে ZIP নিজেই, যেমন [প্রমাণ](https://phishdestroy.github.io/TgWitness/bn/docs/reference/evidence/)-এ।

প্রোভাইডার অ্যাকশনগুলো শ্রেণীবদ্ধ: creation এবং start (creation pass-এর ৩০ মিনিটের মধ্যে) সফল; console, rescue, password reset, rebuild, ISO, images, snapshots, backups, Systems Manager, EC2 Instance Connect এবং firewall openings ব্যর্থ; power অ্যাকশন এবং অপ্রত্যাশিত যেকোনো কিছু পর্যালোচনার জন্য চিহ্নিত করা হয়। কোনো অজানা অ্যাকশন কখনোই নীরবে পাশ হয় না।

## প্রমাণ হস্তান্তরের প্রতিবেদন

`--report report.md` মার্কডাউন রিপোর্ট লেখে এবং `report.json` তার পাশে:

1. ফলাফল, কালেক্টর কী ফিঙ্গারপ্রিন্ট, মোতায়েন, প্রদানকারী, কমিট, সার্ভার, ফায়ারওয়াল, টানেল;
2. প্রতিটি চেক তার অবস্থা এবং উৎস (প্রোভাইডার API, Cloudflare API, কালেক্টর স্টেটমেন্ট, প্রমাণ জার্নাল);
3. প্রোভাইডারের লগ, প্রতিটি কর্মের মূল্যায়ন এবং যেখানে প্রোভাইডার তা রেকর্ড করে, সেখানে অ্যাক্টর;
4. টানেলের সংযোগ, কনফিগারেশন এবং অডিট লগ ধারণকারী Cloudflare এন্ডপয়েন্টসমূহ;
5. স্বাক্ষরিত সংগ্রাহক বিবৃতি;
6. রিপোর্টটি কী প্রতিষ্ঠিত করে এবং কী করে না;
7. এটি পুনরায় তৈরি করার কমান্ড এবং এটিকে যে প্রতিটি ফাইল দেওয়া হয়েছিল তার SHA-256।

রিপোর্টটি হস্তান্তর করুন, `report.json`, `deployment.json`, প্রকাশিত ইনস্টলার এবং প্রমাণ ZIP। রিপোর্টটি আগে জমা দিন: প্রদানকারীর লগ সীমিত সময়ের জন্য সংরক্ষণ করা হয়।

## বাইরের সাক্ষী হিসেবে ক্লাউডফ্লেয়ার

এখানে সবকিছুই ঐচ্ছিক। Cloudflare অ্যাকাউন্ট ছাড়া সার্ভার এখনও চলে, এবং এর মধ্যে দুইটি আজ কাজ করে:

| কি | এটি যা দেখায় | TgWitness-এ |
| --- | --- | --- |
| দ্রুত টানেল বা আপনার ডোমেনের টানেল | প্যানেলটি শুধুমাত্র টানেলের মাধ্যমেই পৌঁছানো যায় | সার্ভার উইজার্ড, উপরের দেখুন |
| ড্র্যান্ড রিলে `drand.cloudflare.com` | ড্র্যান্ড রাউন্ডের পর রেকর্ডগুলো এর চেয়ে নতুন: জার্নালটি লেখার সময় তা চলছিল | প্রমাণ মোড, **আরও সাক্ষী**, কোনো অ্যাকাউন্ট ([ফরম্যাট](https://phishdestroy.github.io/TgWitness/bn/docs/reference/evidence/#optional-records-in-evidence-mode-drand-and-telegram-devices)) |
| টানেল স্বাস্থ্যের বিজ্ঞপ্তি | টানেল ডাউন হলে, Cloudflare থেকে ইমেইল বা ওয়েবহুকের মাধ্যমে | Cloudflare ড্যাশবোর্ডে সেট করুন |
| গেটওয়ে DNS (`--gateway-dns`, অথবা উইজার্ডে **Cloudflare Gateway DNS**) | সার্ভার যে প্রতিটি নাম অনুসন্ধান করেছিল, সেগুলো TLS-এর মাধ্যমে Cloudflare দ্বারা উত্তর দেওয়া হয়েছিল; Hetzner ফায়ারওয়াল DNS-কে অন্য কোনো স্থানে যেতে দেয় না; একটি গেটওয়ে নীতি উত্তরগুলো পুনঃলিখন করতে পারে কিনা | Hetzner, বিনামূল্যের Zero Trust প্ল্যান, কোনো ডোমেইন নেই; `verify` ফায়ারওয়াল, অবস্থান, লগিং, নীতিমালা, সার্ভারের কুয়েরি এবং অডিট লগ পরীক্ষা করে; ইভিডেন্স মোড লগটি জার্নালে অনুলিপি করে |
| Gateway: সার্ভারে Cloudflare One ক্লায়েন্টসহ একটি আউটবাউন্ড ফায়ারওয়াল যা শুধুমাত্র Cloudflare-কে অনুমোদন করে | সার্ভার যে প্রতিটি সংযোগ করেছে, শুধুমাত্র DNS নয় | এখনও তৈরি হয়নি |
| প্যানেলের সামনের অ্যাক্সেস | কে প্যানেলে সাইন ইন করেছেন এবং কখন | তৈরি করা হয়নি: আপনার নিজস্ব ডোমেইন প্রয়োজন |
| SSH কমান্ড লগিং | ডিবাগ সেশনে প্রতিটি কমান্ড | এখনও তৈরি হয়নি |

Logpush, যা Cloudflare-এর নিজস্ব কপি R2-তে সংরক্ষণ করে, একটি এন্টারপ্রাইজ ফিচার: ফ্রি প্ল্যানে Cloudflare উত্তর দেয় `logpush is not enabled for this account`এর গেটওয়ে লগ সেখানে ২৪ ঘণ্টা থাকে, তাই ইভিডেন্স মোড এটিকে স্বাক্ষরিত জার্নালে অনুলিপি করে (**Cloudflare গেটওয়ের লগ, এই সার্ভারের DNS কোয়েরিগুলির**একটি রিড-অনলি টোকেন, অ্যাকাউন্ট অ্যানালিটিক্স রিড সহ)।

জিরো ট্রাস্ট প্ল্যান ছাড়া একটি অ্যাকাউন্টের একটি DNS অবস্থান থাকে। যখন Cloudflare অন্য একটিকে অস্বীকার করে, সার্ভার বিদ্যমান অবস্থানটি শেয়ার করে এবং তার কোয়েরিগুলো ঠিকানা অনুযায়ী পৃথকভাবে চিহ্নিত হয়; সেই ফিল্টারটিকেও Zero Trust PII Read প্রয়োজন, এবং `destroy` একটি ভাগ করা অবস্থান ছেড়ে যায়। একটি লগ কোয়েরি সর্বোচ্চ তিন ঘণ্টা জুড়ে বিস্তৃত হয়, তাই কপি এবং `verify` দিনটিকে তিন-ঘণ্টার উইন্ডোতে পড়ে।

Gateway DNS সিস্টেম রিসলভারকে আচ্ছাদন করে। পোর্ট 443-এ HTTPS-এর মাধ্যমে অন্য কোনো রিসলভারে DNS এবং কোনো ঠিকানায় সংযোগ যা কোথাও খুঁজে পাওয়া যায় না (যেমন টেলিগ্রামের ডেটা সেন্টার), সেগুলো এর লগে নেই।

Cloudflare টেলিগ্রামের এনক্রিপশনের ভিতরে দেখতে পারে না, টেলিগ্রাম অ্যাকাউন্টের অন্যান্য ডিভাইস (প্রমাণ মোডের ডিভাইস তালিকা টেলিগ্রামের পক্ষ থেকে সেগুলো রেকর্ড করে) বা প্রদানকারীর হাইপারভাইজার দেখতে পারে না।

## ডিপ্লয়মেন্টের ফলাফল পড়া

একটি সাধারণ VM-এর জন্য, প্রদানকারী হোস্ট অবকাঠামো এবং স্থানীয় ইনভেন্টরি নিয়ন্ত্রণ করে, এবং সেগুলো প্রদানকারীর রেকর্ডের পাশাপাশি যাচাই করা হয়। Intel TDX-এর জন্য, যাচাইকারী অতিরিক্তভাবে হার্ডওয়্যার কোট, কালেক্টর বাইন্ডিং, কম্পোজ এবং OS পরিমাপ যাচাই করে। কোন পরীক্ষাগুলো পাস হয়েছে বা অনুপলব্ধ ছিল তা দেখতে পৃথক ফলাফলগুলো পড়ুন।

ঐতিহাসিক ফায়ারওয়াল বিশদ প্রদানকারীর উপর নির্ভর করে; Linode নিয়মের সংস্করণ সংরক্ষণ করে। [যাচাইকরণ রেকর্ড](https://phishdestroy.github.io/TgWitness/bn/docs/reference/verification/) পরীক্ষিত স্থাপনা এবং অবশিষ্ট লাইভ চেক তালিকাভুক্ত করে, এবং [যাচাইকরণ পরিধি](https://phishdestroy.github.io/TgWitness/bn/docs/reference/evidence/#verification-scope) এই পরিবেশ চেকগুলোকে আর্কাইভ সংগ্রহ এবং অখণ্ডতার সাথে সংযুক্ত করে।
