এটি গুরুত্বপূর্ণ যে টিঙ্ক সমস্ত প্রোগ্রামিং ভাষায় "একই" আচরণ করে। এই ধারণাটি সহজবোধ্য নয়, তবে সবচেয়ে গুরুত্বপূর্ণ:
ধারাবাহিকতা বজায় রাখতে, Tink ক্রস-ভাষা পরীক্ষা ব্যবহার করে যা ক্রস-ভাষা GitHub সংগ্রহস্থলে পাওয়া যেতে পারে। এই পরীক্ষাগুলি বিভিন্ন ভাষার ধারাবাহিকতা এবং আন্তঃকার্যযোগ্যতা যাচাই করে।
যাইহোক, ধারাবাহিকতা সংজ্ঞায়িত করা ততটা সহজ নয় যতটা কেউ আশা করবে। অতএব, এই পৃষ্ঠাটি আমাদের কাজের সংজ্ঞা প্রদান করে। মূলত, Tink দুই ধরনের ধারাবাহিকতা প্রদান করে:
- মূল্যায়নের ধারাবাহিকতা: একটি প্রদত্ত কীসেট 1 এর জন্য, যদি আদিম সৃষ্টি দুটি ভাষায় সফল হয়, তারা একই আচরণ করে।
- ক্রিয়েশন কনসিস্টেন্সি: একটি আদিম তৈরি করা একটি ভাষায় সফল হয় যদি ভাষাটি একটি কীসেটে সমস্ত কী ধরনের সমর্থন করে, যেমনটি আমাদের সমর্থিত কী প্রকারের তালিকায় নথিভুক্ত করা হয়েছে।
প্রসঙ্গ
একটি উচ্চ স্তরে, Tink নিম্নলিখিত API প্রদান করে:
কীসেট ম্যানিপুলেশন: টিঙ্ক একটি কীসেটে নতুন কী যোগ করতে, একটি কীসেট থেকে কীগুলি সরাতে এবং একটি কীসেটে প্রাথমিক কী পরিবর্তন করতে API প্রদান করে।
কীসেট সিরিয়ালাইজেশন: টিঙ্ক বাইটের একটি ক্রমানুসারে একটি কীসেটকে সিরিয়ালাইজ করার জন্য এপিআই সরবরাহ করে এবং বিপরীতভাবে বাইটের একটি ক্রম থেকে একটি কীসেট পার্স করে।
আদিম সৃষ্টি: টিঙ্ক একটি কীসেট থেকে আদিম জন্য একটি ইন্টারফেস তৈরি করতে একটি API প্রদান করে। উদাহরণস্বরূপ, জাভাতে একটি কীসেট থেকে একটি
Aead
অবজেক্ট তৈরি করতে, ব্যবহারকারী কল করেkeysetHandle.getPrimitive(Aead.class, config)
।আদিম ব্যবহার: আদিম সৃষ্টির ধাপে উত্পাদিত ইন্টারফেস ক্রিপ্টোগ্রাফিক ক্রিয়াকলাপ সম্পাদন করার জন্য একটি API প্রদান করে।
এই APIগুলি সম্পর্কে জিজ্ঞাসা করার জন্য দুটি গুরুত্বপূর্ণ প্রশ্ন রয়েছে:
সৃষ্টি: একটি প্রদত্ত ক্রমিক কীসেট, ভাষা এবং আদিম জন্য, ভাষাতে এই কীসেট থেকে আদিম তৈরি করা কি সম্ভব?
মূল্যায়ন: প্রদত্ত কীসেট থেকে যদি কিছু ভাষায় একটি আদিম তৈরি করা যায়, তাহলে আদিম বস্তুটি কীভাবে আচরণ করে?
এটি লক্ষ্য করা গুরুত্বপূর্ণ যে একটি কীসেট পার্স করার সময় Tink ধারাবাহিকতা প্রদান করে না। উদাহরণস্বরূপ, এটা সম্ভব যে Tink C++
- CHACHA20-POLY1305 কী সমন্বিত কীসেট সফলভাবে পার্স করে, যদিও CHACHA20-POLY1305 AEAD অপারেশন টিঙ্কে প্রয়োগ করা হয় না;
- 1-বাইটের দৈর্ঘ্যের কীগুলির সাথে সফলভাবে কীসেটগুলি পার্স করে, যা সমস্ত ক্রিপ্টোগ্রাফিক ক্রিয়াকলাপে ব্যর্থ হবে।
এই আচরণগুলি ক্ষুদ্র সংস্করণে পরিবর্তিত হতে পারে।
মূল্যায়নের ধারাবাহিকতা
মূল্যায়নের সামঞ্জস্যতা সৃষ্টি প্রক্রিয়ার যেকোনো ধারাবাহিকতার চেয়ে বেশি গুরুত্বপূর্ণ: যদি জাভাতে একটি AEAD C++ এ AEAD এর এনক্রিপশন ডিক্রিপ্ট করতে না পারে, ব্যবহারকারীদের একটি গুরুতর সমস্যা রয়েছে।
সাধারণভাবে, টিঙ্কের লক্ষ্য আদিমদের জন্য সুস্পষ্ট উপায়ে সামঞ্জস্যপূর্ণ হওয়া। উদাহরণস্বরূপ, যদি একটি C++ বাইনারি public_key_sign->Sign(data)
দিয়ে একটি স্বাক্ষর গণনা করে, তাহলে সংশ্লিষ্ট জাভা যাচাইকরণ কল publicKeyVerify.verify(signature, data)
সফল হবে বলে আশা করা হচ্ছে।
যাইহোক, এমনকি এখানে কিছু সতর্কতা আছে। উদাহরণস্বরূপ, জাভাতে aead.Encrypt
রিটার্ন টাইপ হল একটি byte[]
। প্রতি জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশন (JLS) §10.7, একটি অ্যারের দৈর্ঘ্য int
এর টাইপ যা প্রতি §JLS 4.2.1 সর্বোচ্চ 2147483647 হতে পারে। তাই, 2147483647 দৈর্ঘ্যের অ্যারের এনক্রিপশন জাভাতে ব্যর্থ হয়: এনক্রিপশন আছে কিছু ওভারহেড, যার অর্থ আউটপুট খুব দীর্ঘ হবে। তা সত্ত্বেও, অন্যান্য ভাষায় এনক্রিপশন এই ধরনের ইনপুটগুলির জন্য সফল হতে অনুমোদিত।
তাই, Tink মূল্যায়নের ধারাবাহিকতা প্রদান করে: একটি প্রদত্ত কীসেটের জন্য, যদি আদিম সৃষ্টি দুটি ভাষায় সফল হয়, তারা একই আচরণ করে।
ব্যতিক্রম হল কিছু অপারেশন কিছু ব্যতিক্রমী পরিস্থিতিতে ব্যর্থ হতে পারে।
সৃষ্টির ধারাবাহিকতা
সমস্ত কীসেটের জন্য আদিম সৃষ্টি সবসময় সফল হয় না। উদাহরণস্বরূপ, টিঙ্ক ব্যবহারকারীদের একটি AesSivKey তৈরি করার অনুমতি দেয় না যদি মূল উপাদানটির দৈর্ঘ্য 128 বিট থাকে।
তবুও, Tink নিম্নরূপ সামঞ্জস্য প্রদান করে: যদি দুটি ভাষা উভয়ই একটি কী প্রকারকে সমর্থন করে, তাহলে কীগুলির সেট যার জন্য আদিম তৈরি করা যেতে পারে তা মিলে যায়। অবশ্যই, যদি একটি ভাষা একটি কী ধরনের সমর্থন না করে, তাহলে কোন আদিম বস্তু তৈরি করা যাবে না।
ক্রিয়েশন সঙ্গতি মূল্যায়নের ধারাবাহিকতার চেয়ে কম গুরুত্বপূর্ণ, এবং মূল্যায়নের ধারাবাহিকতার চেয়ে এই নিয়মের আরও ব্যতিক্রম রয়েছে। এই সীমাবদ্ধতাগুলি আমাদের সমর্থিত কী প্রকারের তালিকায় নথিভুক্ত করা হয়েছে৷ উদাহরণস্বরূপ, কী টাইপের জন্য ECIES Tink কী চুক্তির জন্য উপবৃত্তাকার বক্ররেখা ব্যবহার করার একটি পছন্দ অফার করে, কিন্তু Java X25519 সমর্থন করে না। সুতরাং, জাভাতে X25519 ব্যবহার করে একটি কী তৈরি করা ব্যর্থ হয়।
এই নথিতে, আমরা বেশিরভাগ ভাষায়
KeysetHandle
নামক বস্তুটিকে বোঝাতেKeyset
শব্দটি ব্যবহার করি। ↩