SingLink প্রোটোকল এখন ওপেন সোর্স

Contents
আজ SingLinkVPN-এর পেছনের দল SingLinkLabs, SingLink প্রোটোকল-এর সম্পূর্ণ সোর্স কোড Apache-2.0 লাইসেন্সের অধীনে GitHub-এ প্রকাশ করেছে। এখন যে কেউ এর স্পেসিফিকেশন পড়তে পারেন, কোড চালাতে পারেন, এর নিরাপত্তা যাচাই করতে পারেন এবং এর ওপর ভিত্তি করে নিজের কাজ গড়ে তুলতে পারেন।
যখন আমরা SingLinkVPN ওপেন-সোর্স পরিকল্পনা ঘোষণা করেছিলাম, তখন বলেছিলাম যে একটি VPN প্রোটোকল ও একটি VPN ক্লায়েন্ট ধাপে ধাপে আসবে। এটি সেই ধাপ। প্রোটোকলের সঙ্গেই প্রকাশিত হয়েছে SingLinkVPN অ্যাপের প্রথম প্রজন্মের প্রোটোটাইপ, যা এই প্রোটোকলেই চলে — দেখুন SingLinkVPN অ্যাপের প্রোটোটাইপ এখন ওপেন সোর্স।
রিপোজিটরি: SingLinkLabs / singlink-protocol · সংস্করণ: 1.0.0-draft (ওয়্যার নাম
SingLink/1, স্পেসিফিকেশন ড্রাফট 2) · লাইসেন্স: Apache-2.0 · ভাষা: Go, শুধু স্ট্যান্ডার্ড লাইব্রেরি
যা প্রকাশ করা হচ্ছে
- স্পেসিফিকেশন। SPEC.md ওয়্যার ফরম্যাটকে বাইট ধরে ধরে বর্ণনা করে, যাতে যে কেউ স্বাধীনভাবে প্রোটোকলটি বাস্তবায়ন করতে পারেন।
- Go-তে লেখা প্রোটোকল লাইব্রেরি। এটি শুধু Go স্ট্যান্ডার্ড লাইব্রেরির ক্রিপ্টোগ্রাফি ব্যবহার করে, কোনো থার্ড-পার্টি ডিপেন্ডেন্সি ছাড়াই।
- একটি কমান্ড-লাইন টুল, যা দিয়ে কী তৈরি করা, অ্যাক্সেস পাস ইস্যু করা, কানেকশন লিংক তৈরি করা, নোড ও ক্লায়েন্ট চালানো এবং একটি মেশিনেই ডেমো চালু করা যায়।
- অ্যাপের জন্য একটি লোকাল প্রক্সি (SOCKS5 ও HTTP) এবং একটি C লাইব্রেরি ইন্টারফেস (
libsinglink), যাতে যেকোনো প্ল্যাটফর্মের অ্যাপ প্রোটোকলটি নিজের ভেতরে যুক্ত করতে পারে। - ডিপ্লয়মেন্টের উদাহরণ: একটি নমুনা নোড কনফিগারেশন এবং নিরাপত্তা-জোরদার করা একটি systemd সার্ভিস ফাইল।
- অভ্যন্তরীণ নিরাপত্তা পর্যালোচনা, প্রতিটি ফলাফল ও তার সমাধানসহ: SECURITY-AUDIT.md।
SingLink 2.0 আর SingLink ওপেন প্রোটোকল আলাদা দুটি প্রোটোকল
অফিশিয়াল SingLinkVPN অ্যাপগুলো আমাদের প্রোডাকশন প্রোটোকলে চলে, যার মধ্যে SingLink 2.0 রয়েছে। SingLink 2.0-এর মূল সোর্স কোড এই রিলিজের অংশ নয় এবং তা বন্ধই থাকবে।
আজ প্রকাশিত SingLink প্রোটোকল — SingLink 2.0 থেকে আলাদা করে বোঝানোর দরকার হলে যাকে SingLink ওপেন প্রোটোকল বলা হয় — একটি আলাদা প্রোটোকল, যা SingLinkLabs উন্মুক্ত উন্নয়নের জন্য একেবারে শূন্য থেকে ডিজাইন করেছে। অফিশিয়াল অ্যাপগুলো বর্তমানে এটি ব্যবহার করে না। বর্তমান ব্যবহারকারীদের জন্য কিছুই বদলাচ্ছে না: একই অ্যাপ, একই অ্যাকাউন্ট এবং একই কানেকশন।
কেন আমরা এটি ওপেন সোর্স করছি
- নিরাপত্তার দাবি যাচাইযোগ্য হওয়া উচিত। পোস্ট-কোয়ান্টাম কী এক্সচেঞ্জ, ডিভাইস বাইন্ডিং আর প্রোবিং প্রতিরোধের দাবি করা সহজ। কোড ও স্পেসিফিকেশন উন্মুক্ত থাকায় যে কেউ এগুলো যাচাই করতে পারেন।
- বেশি চোখ, দ্রুত সমস্যা ধরা পড়ে। বাইরের গবেষক ও প্রকৌশলীরা এমন সমস্যা দেখতে পাবেন, যা একটি অভ্যন্তরীণ দলের চোখ এড়িয়ে যায়।
- অন্যরা এর ওপর গড়ে তুলতে পারেন। ডেভেলপাররা এটি পরীক্ষা করতে, নিজেদের প্রজেক্টে যুক্ত করতে এবং উন্নতির প্রস্তাব দিতে পারেন।
- এটি আমাদের পরিকল্পনারই বাস্তবায়ন। একটি প্রোটোকল প্রকাশ করা ছিল আমাদের প্রতিশ্রুত ধাপগুলোর একটি।
এটি কীভাবে কাজ করে, সহজ ভাষায়
মূল ধারণা এক বাক্যে: বাইরে থেকে মনে হয় ব্যবহারকারী শুধু একটি সাধারণ HTTPS ওয়েবসাইটে যাচ্ছেন। এর ভেতরে লুকানো থাকে একটি এনক্রিপ্ট করা অ্যাক্সেস অনুরোধ, আর সার্ভার কেবল বৈধ পাসধারীর ট্রাফিকই আদান-প্রদান করে।
ডিজাইনে তিনটি কী ব্যবহার হয়। একটি অফিস ভবনের নিরাপত্তা ব্যবস্থার কথা ভাবুন:
- নোড কী, অর্থাৎ দরজার তালা। প্রতিটি সার্ভারের নিজস্ব একটি থাকে। কেবল সেই সার্ভারই ব্যবহারকারীর অনুরোধ খুলতে পারে, যা এটাও প্রমাণ করে যে ব্যবহারকারী আসল সার্ভারে পৌঁছেছেন।
- ইস্যুয়ার কী, অর্থাৎ HR বিভাগের সিল। এটি থাকে অ্যাকাউন্ট ব্যাকএন্ডের কাছে, যা প্রতিটি অ্যাক্সেস পাসে প্ল্যান, মেয়াদ শেষের তারিখ, গতিসীমা ও ডিভাইস-সীমার সিল দেয়।
- ডিভাইস কী, অর্থাৎ ব্যবহারকারীর আঙুলের ছাপ। এটি থাকে ব্যবহারকারীর ফোন বা কম্পিউটারে এবং প্রতিটি কানেকশনে স্বাক্ষর করে, যা প্রমাণ করে যে পাসটি তার প্রকৃত মালিকই ব্যবহার করছেন।
নিজে নিজে একটি পাস যাচাই করতে সার্ভারের শুধু জানা দরকার সিলটি দেখতে কেমন। এ কারণেই নোডগুলো কোনো ব্যবহারকারী ডেটাবেস রাখে না এবং কোনো ব্যবহারকারীর ডেটা সংরক্ষণ করে না।
একটি কানেকশনের সময় কী ঘটে
- অ্যাপটি একটি ওয়েবসাইটের সঙ্গে দেখতে সাধারণ একটি HTTPS কানেকশন খোলে।
- এর প্রথম প্যাকেটে থাকে এই কানেকশনের জন্য একবার-ব্যবহারযোগ্য একটি কী, একটি পোস্ট-কোয়ান্টাম সাইফারটেক্সট এবং একটি সিল করা অংশ, যাতে রয়েছে গন্তব্য, অ্যাক্সেস পাস, আসল ডেটার প্রথম 8 KB পর্যন্ত এবং পুরো অনুরোধের ওপর ডিভাইসের স্বাক্ষর। কোনো অতিরিক্ত রাউন্ড ট্রিপের প্রয়োজন হয় না।
- সার্ভার সবকিছু যাচাই করে: সে অনুরোধটি ডিক্রিপ্ট করতে পারছে কি না, সিলটি আসল কি না, ডিভাইসের স্বাক্ষর মিলছে কি না, সময় ঠিক আছে কি না, এবং অনুরোধটি পুনরায় পাঠানো (রিপ্লে) কি না, মেয়াদোত্তীর্ণ বা বাতিল কি না।
- প্রতিটি যাচাই সফল হলেই কেবল সে উত্তর দেয় এবং ট্রাফিক আদান-প্রদান শুরু করে। কোনো একটি যাচাই ব্যর্থ হলে কানেকশনটি অক্ষত অবস্থায় একটি আসল ওয়েবসাইটের কাছে হস্তান্তর করা হয়। যে কেউ সার্ভারটি প্রোব করলে সবসময় শুধু একটি সাধারণ ওয়েবসাইটই দেখতে পান, সময়েও কোনো পার্থক্য থাকে না।
- দুই পক্ষ তাদের একবার-ব্যবহারযোগ্য কীগুলো মিলিয়ে এই কানেকশনের সেশন কী তৈরি করে। ডেটা খণ্ডে খণ্ডে এনক্রিপ্ট হয়, প্রথম দিকের খণ্ডগুলোতে প্যাডিং যোগ করা হয়, এবং নির্দিষ্ট পরিমাণ ব্যবহারের পর কী স্বয়ংক্রিয়ভাবে বদলে যায়।
নিরাপত্তা বৈশিষ্ট্য
- দুই স্তরের এনক্রিপশন। বাইরে HTTPS আর ভেতরে প্রোটোকলের নিজস্ব AES-256-GCM স্তর, তাই HTTPS টার্মিনেট করে এমন CDN-ও কনটেন্ট দেখতে পায় না।
- পোস্ট-কোয়ান্টাম সুরক্ষা। কী এক্সচেঞ্জে ক্লাসিক্যাল X25519-কে ML-KEM-768 (FIPS 203)-এর সঙ্গে যুক্ত করা হয়েছে। আক্রমণকারীকে দুটোই ভাঙতে হবে।
- ফরওয়ার্ড সিক্রেসি। প্রতিটি কানেকশন একবার-ব্যবহারযোগ্য কী ব্যবহার করে, তাই পরে কোনো সার্ভার বেহাত হলেও আগের ট্রাফিক ডিক্রিপ্ট করা যায় না। ব্যতিক্রম প্রথম প্যাকেট (নিচের সীমাবদ্ধতাগুলো দেখুন)।
- ডিভাইস বাইন্ডিং। কোথাও থেকে কপি করা অ্যাক্সেস পাস যে ডিভাইস কী-র জন্য ইস্যু করা হয়েছিল, সেটি ছাড়া অকেজো।
- রিপ্লে সুরক্ষা। ধরে রাখা প্যাকেট আবার পাঠালে কাজ হয় না, সার্ভার রিস্টার্ট হওয়ার পরেও না।
- প্রোবিং প্রতিরোধ। মেয়াদোত্তীর্ণ, বাতিল, রিপ্লে করা বা জাল, সব অনুরোধের সঙ্গে একই আচরণ করা হয়: সেগুলো আসল ওয়েবসাইটের কাছে হস্তান্তর করা হয়।
- কেন্দ্রীয় নিয়ন্ত্রণ। কোনো অ্যাকাউন্ট বা ডিভাইস বাতিল করা হলে প্রতিটি সার্ভারে তার চলমান কানেকশন প্রায় 10 সেকেন্ডের মধ্যে বন্ধ হয়ে যায়।
- সুরক্ষিত সার্ভার। প্রতি সার্ভার ও প্রতি IP কানেকশন-সীমা, হ্যান্ডশেকের জন্য CPU বাজেট, এবং প্রাইভেট ও বিশেষ-উদ্দেশ্যের ঠিকানাগুলোর একটি সম্পূর্ণ ব্লক তালিকা।
ধারণাগুলো কোথা থেকে এসেছে
SingLink প্রোটোকল প্রতিষ্ঠিত ডিজাইন থেকে শিক্ষা নিয়েছে: VLESS ও Trojan থেকে একক-অনুরোধের কানেকশন, Trojan ও obfs4 থেকে ব্যর্থ কানেকশন আসল ওয়েবসাইটের কাছে হস্তান্তর, Noise NK হ্যান্ডশেক প্যাটার্ন, TLS 1.3 থেকে কী ডেরিভেশন ও 0-RTT ব্যবস্থাপনা, X-Wing খসড়া স্ট্যান্ডার্ড থেকে হাইব্রিড পোস্ট-কোয়ান্টাম কী এক্সচেঞ্জ, Shadowsocks AEAD থেকে খণ্ডভিত্তিক এনক্রিপশন, JWT ও PASETO থেকে স্বাক্ষরিত টোকেন, OAuth DPoP থেকে ডিভাইস-বদ্ধ টোকেন, HAProxy PROXY protocol, এবং WireGuard থেকে রিপ্লে ও লোড সুরক্ষা।
এগুলো কেবল ডিজাইনের ধারণা। সব কোড শূন্য থেকে লেখা হয়েছে। Xray, V2Ray, sing-box বা WireGuard-এর কোনো কোড এতে নেই।
বর্তমান অবস্থা ও জানা সীমাবদ্ধতা
- এটি একটি খসড়া। সংস্করণ 1.0.0-draft, এবং ওয়্যার ফরম্যাট এখনও বদলাতে পারে।
- এখন পর্যন্ত শুধু অভ্যন্তরীণ নিরাপত্তা পর্যালোচনা। দুজন পর্যালোচক আলাদাভাবে ক্রিপ্টোগ্রাফিক ডিজাইন ও বাস্তবায়ন পরীক্ষা করে 31টি ফলাফল নথিভুক্ত করেছেন: 2টি উচ্চ, 14টি মাঝারি, আর বাকিগুলো নিম্ন বা শুধু তথ্যমূলক। এগুলোর কোনোটিই ব্যবহারকারীর ট্রাফিকের গোপনীয়তা বা প্রমাণীকরণ ভাঙেনি। সব উচ্চ ও মাঝারি ফলাফল সংশোধন বা প্রশমিত করা হয়েছে, প্রতিটির জন্য একটি রিগ্রেশন টেস্ট আছে, এবং প্রতিটি পার্সার fuzz টেস্টের আওতায় রয়েছে।
- এখনও কোনো থার্ড-পার্টি অডিট হয়নি। স্বাধীন অডিট না হওয়া পর্যন্ত উচ্চ-ঝুঁকির কাজে প্রোটোকলটির ওপর নির্ভর না করার পরামর্শ দিচ্ছি। একে স্থিতিশীল ঘোষণা করার আগে আমরা এমন অডিটের পরিকল্পনা করছি।
- প্রথম প্যাকেটে ফরওয়ার্ড সিক্রেসি নেই। এটি সার্ভারের দীর্ঘমেয়াদি কী দিয়ে সুরক্ষিত, তাই সার্ভারের কী নিয়মিত বদলানো উচিত। কী রোটেশন সমর্থিত।
- মূল ভূখণ্ড চীনে বাস্তব পরিস্থিতিতে পরীক্ষিত নয়। এর TLS ফিঙ্গারপ্রিন্ট ও প্রথম প্যাকেটের আকার এখনও আলাদা করে চেনা যায়। মূল ভূখণ্ড চীনের ব্যবহারকারীদের জন্য অফিশিয়াল SingLinkVPN অ্যাপগুলো আমাদের বিদ্যমান প্রোডাকশন প্রোটোকলই ব্যবহার করে যাবে।
- একটি সার্ভারের নিজস্ব ডোমেইন লাগে, সঙ্গে ব্রাউজারে গ্রহণযোগ্য একটি সার্টিফিকেট এবং তার পেছনে একটি আসল ওয়েবসাইট।
চেষ্টা করে দেখুন ও যুক্ত হোন
Go 1.24 বা তার পরের সংস্করণে, make test টেস্ট স্যুট চালায়, make cli কমান্ড-লাইন টুল তৈরি করে, এবং singlink demo একটি মেশিনেই একটি লোকাল সার্ভার ও ক্লায়েন্ট চালু করে। রিপোজিটরি-র README-তে সার্ভার চালানোর নিয়ম ব্যাখ্যা করা আছে।
GitHub-এ প্রশ্ন, বাগ রিপোর্ট ও Pull Request স্বাগত। অনুগ্রহ করে নিরাপত্তা দুর্বলতার খবর কোনো পাবলিক Issue-তে নয়, গোপনে জানান — প্রক্রিয়াটি SECURITY.md-তে দেওয়া আছে।
লাইসেন্স ও ট্রেডমার্ক
কোডটি Apache-2.0 লাইসেন্সের অধীনে: লাইসেন্সের শর্ত মেনে আপনি এটি ব্যবহার, পরিবর্তন ও পুনর্বিতরণ করতে পারেন, বাণিজ্যিকভাবেও। "SingLink" ও "SingLinkVPN" নাম এবং লোগো SingLinkLabs-এর ট্রেডমার্ক, এবং কাজটি কোথা থেকে এসেছে তা বর্ণনা করা ছাড়া লাইসেন্স এগুলো ব্যবহারের অনুমতি দেয় না। পরিবর্তিত সংস্করণ ও ফর্ক নিজস্ব নাম ও আইকন দিয়ে প্রকাশ করা উচিত।
আরও পড়ুন
- SingLinkVPN অ্যাপের প্রোটোটাইপ এখন ওপেন সোর্স — এবং এর কোড GitHub-এ
- SingLinkLabs-এর ওপেন-সোর্স প্রজেক্ট
- SingLink 2.0 টেকনিক্যাল হোয়াইটপেপার, অফিশিয়াল অ্যাপগুলোর প্রোডাকশন প্রোটোকল

