رمزگذاری VLESS
رمزگذاری VLESS لایهٔ رمزگذاری Xray برای VLESS است، mlkem768x25519plus. جریان VLESS را با کلیدهایی
رمز میکند که در یک دستدهی ترکیبی پساکوانتومی (ML-KEM-768 و X25519) توافق میشوند؛ پس VLESS بدون TLS،
یا درون هر ترنسپورتی، امن اجرا میشود. این فیلد encryption در خروجی VLESS و فیلد decryption در
ورودی VLESS است. رشتهها همان رشتههای Xray هستند.
چرا از آن استفاده کنیم
- برای اتصال به سرورهای Xray که رمزگذاری VLESS را لازم دارند.
- برای اجرای VLESS بدون TLS، یا پشت CDN یا پراکسیای که TLS را باز میکند، در حالی که محتوا میان کلاینت و سرور همچنان سربهسر رمز شده است.
- برای افزودن Vision (
xtls-rprx-vision) روی رمزگذاری، وقتی TLS در کار نیست.
چطور از فیلترینگ عبور میکند
در حالت random همه چیز روی سیم، حتی دستدهی، شبیه بایتهای تصادفی است و هیچ هدر پروتکلی برای
تطبیق فیلتر وجود ندارد. xorpub فقط کلیدهای عمومی دستدهی را پنهان میکند؛ native دستدهی را همانطور
که هست میفرستد. تنظیمات padding در رشته اندازهٔ اولین بستهها را تغییر میدهد.
ترافیکی که تصادفی به نظر میرسد، خودش در برخی شبکهها مسدود میشود. در چنین جاهایی رمزگذاری را درون ترنسپورتی که شبیه ترافیک عادی وب است (مثل XHTTP یا WebSocket با TLS) به کار ببرید، نه بهتنهایی.
چطور کار میکند
- رشتهٔ کلاینت کلیدهای عمومی سرور را دارد و رشتهٔ سرور کلیدهای خصوصی متناظر را. چند کلید پشت سر هم یک زنجیره میسازند و دو طرف باید همان تعداد را به همان ترتیب داشته باشند.
1rttدر هر اتصال دستدهی کامل انجام میدهد.0rttاز تیکت سرور دوباره استفاده میکند تا اتصالهای بعدی بیدرنگ داده بفرستند. مدت اعتبار تیکت را سرور تعیین میکند.- رمزگذاری درون TLS و ترنسپورت، درست زیر VLESS، اجرا میشود؛ پس با همهٔ ترنسپورتها کار میکند. در
سرور، وقتی
decryptionتنظیم شده باشد kTLS خاموش میشود. - اگر دستدهی شکست بخورد یا context اتصال زودتر تمام شود، اتصال بسته میشود.
پیکربندی
کلاینت:
{
"outbounds": [
{
"type": "vless",
"server": "203.0.113.1",
"server_port": 8443,
"uuid": "bf000d23-0752-40b4-affe-68f7707a9661",
"encryption": "mlkem768x25519plus.random.0rtt.<server public key>"
}
]
}
سرور:
{
"inbounds": [
{
"type": "vless",
"listen": "::",
"listen_port": 8443,
"users": [{ "uuid": "bf000d23-0752-40b4-affe-68f7707a9661" }],
"decryption": "mlkem768x25519plus.random.600s.<server private key>"
}
]
}
| فیلد | نوع | پیشفرض | معنا |
|---|---|---|---|
encryption (خروجی) |
string | "" |
none یا خالی: بدون رمزگذاری. در غیر این صورت mlkem768x25519plus.<mode>.<rtt>[.<padding>…].<key>[.<key>…]. |
decryption (ورودی) |
string | "" |
none یا خالی: بدون رمزگذاری. در غیر این صورت mlkem768x25519plus.<mode>.<seconds>[.<padding>…].<key>[.<key>…]. |
بخشهای رشته، جداشده با نقطه:
| بخش | مقدارها | معنا |
|---|---|---|
<mode> |
native، xorpub، random |
native: دستدهی ساده. xorpub: کلیدهای عمومی دستدهی پنهان میشوند. random: همهٔ بایتها تصادفی به نظر میرسند. دو طرف باید حالت یکسان داشته باشند. |
<rtt> (کلاینت) |
0rtt، 1rtt |
استفادهٔ دوباره از تیکتهای سرور، یا دستدهی کامل در هر بار. |
<seconds> (سرور) |
مثل 600s یا 300-600s |
مدت اعتبار تیکت. |
<padding> |
بخشهای padding در Xray | اختیاری؛ اندازه و تأخیر padding روی اولین بستهها، مثل Xray. |
<key> (کلاینت) |
base64url | کلید عمومی X25519 (۳۲ بایت) یا کلید encapsulation در ML-KEM-768 (۱۱۸۴ بایت). |
<key> (سرور) |
base64url | کلید خصوصی X25519 (۳۲ بایت) یا seed در ML-KEM-768 (۶۴ بایت). |
کلیدها و رشتههای کامل را میتوان با فرمان xray vlessenc در Xray ساخت. رشتهای با پیشوند، حالت،
مقدار RTT یا طول کلید نادرست خطای پیکربندی است.
Vision: در هیدیفای، flow: "xtls-rprx-vision" روی خروجی بدون TLS یا REALITY و روی رمزگذاری VLESS هم
کار میکند؛ یکی از این دو را لازم دارد. در حالت random، Vision عمل splice (کپی مستقیم میان سوکتها)
را انجام نمیدهد. وقتی multiplex روشن باشد flow خاموش میشود، چون Vision روی اتصال مالتیپلکسشده
اجرا نمیشود.