কীসেট

Tink কী ঘূর্ণন সক্ষম করতে কীসেট ব্যবহার করে। আনুষ্ঠানিকভাবে, একটি কীসেট হল একটি অ-খালি তালিকা 1 কী যার মধ্যে একটি কী প্রাথমিক মনোনীত করা হয় (যে কীটি নতুন প্লেইনটেক্সট সাইন এবং এনক্রিপ্ট করার জন্য ব্যবহার করা হয়)। উপরন্তু, একটি কীসেটের কীগুলি একটি অনন্য আইডি 2 এবং একটি কী স্ট্যাটাস পায় যা কীসেট থেকে তাদের অপসারণ না করেই কীগুলিকে নিষ্ক্রিয় করতে দেয়৷

কীসেট হল প্রধান উপায় যেখানে ব্যবহারকারীরা কীগুলি অ্যাক্সেস করতে পারে (ক্লাস KeysetHandle এর মাধ্যমে)। এটি নিশ্চিত করে যে প্রতিটি ব্যবহারকারীর একবারে একাধিক কী পরিচালনা করার জন্য কোড রয়েছে। ক্রিপ্টোগ্রাফির বেশিরভাগ ব্যবহারকারীর জন্য, একাধিক কীগুলি পরিচালনা করা একটি প্রয়োজনীয়তা : কীগুলি পরিবর্তন করা সম্ভব হওয়া দরকার (উদাহরণস্বরূপ, পুরানো কীগুলি ফাঁস করা যেতে পারে), এবং সেখানে প্রায় কখনই একটি পারমাণবিক "পরবর্তী কীতে সুইচ" নেই যা প্রয়োগ করা যেতে পারে মেশিনে কোড চলে এবং সমস্ত সাইফারটেক্সট, বিশ্বব্যাপী, এবং তাত্ক্ষণিকভাবে। সুতরাং, ব্যবহারকারীকে কোড লিখতে হবে যা কাজ করে যখন একটি কী থেকে পরবর্তীতে পরিবর্তন হয়।

উদাহরণ: AEAD

একটি AEAD কীসেট বিবেচনা করুন, যাতে AEAD আদিম জন্য একাধিক কী রয়েছে। যেমন আগে ব্যাখ্যা করা হয়েছে, প্রতিটি কী স্বতন্ত্রভাবে দুটি ফাংশন নির্দিষ্ট করে: \(\mathrm{Enc}\) এবং \(\mathrm{Dec}\)। কীসেটটি এখন দুটি নতুন ফাংশনও নির্দিষ্ট করে: \(\mathrm{Enc}\) এবং \(\mathrm{Dec}\) - \(\mathrm{Enc}\) কেবল কীসেটের প্রাথমিক কী-এর ফাংশন \(\mathrm{Enc}\) এর সমান, যখন ফাংশন \(\mathrm{Dec}\) সমস্ত কী দিয়ে ডিক্রিপ্ট করার চেষ্টা করে। এগুলিকে কিছু ক্রমে (টিঙ্ক কীভাবে এটির কার্যকারিতা উন্নত করে তার জন্য নীচে দেখুন)।

এটি লক্ষ্য করা আকর্ষণীয় যে কীসেটগুলি সম্পূর্ণ কী : এগুলি \(\mathrm{Enc}\) এবং\(\mathrm{Dec}\) ব্যবহৃত ফাংশনগুলির সম্পূর্ণ বিবরণ। এর মানে হল যে ব্যবহারকারীরা একটি ক্লাস লিখতে পারে যা একটি KeysetHandle ইনপুট হিসাবে নেয়, এই ধারণাটি প্রকাশ করে যে ক্লাসটি সঠিকভাবে কাজ করার জন্য \(\mathrm{Enc}\) এবং \(\mathrm{Dec}\) অবজেক্টগুলির একটি সম্পূর্ণ বিবরণ প্রয়োজন। এটি ব্যবহারকারীকে API লিখতে সক্ষম করে যা যোগাযোগ করে: এই ক্লাসটি ব্যবহার করার জন্য আপনাকে আমাকে একটি ক্রিপ্টোগ্রাফিক আদিম বিবরণ প্রদান করতে হবে।

কী ঘূর্ণন

একজন Tink ব্যবহারকারীর কথা বিবেচনা করুন, একটি প্রোগ্রাম লিখছেন যা প্রথমে একটি KMS থেকে একটি কীসেট পায়, তারপর এই কীসেট থেকে একটি AEAD অবজেক্ট তৈরি করে এবং অবশেষে এই বস্তুটি সাইফারটেক্সট এনক্রিপ্ট এবং ডিক্রিপ্ট করতে ব্যবহার করে।

এই ধরনের ব্যবহারকারী কী ঘূর্ণনের জন্য স্বয়ংক্রিয়ভাবে প্রস্তুত হয়; এবং তাদের বর্তমান পছন্দ আর মান পূরণ না হলে অ্যালগরিদম স্যুইচ করা।

এই ধরনের কী ঘূর্ণন কার্যকর করার সময় একজনকে কিছুটা সতর্ক থাকতে হবে: প্রথমে, KMS-এর কীসেটে একটি নতুন কী যোগ করা উচিত (কিন্তু এটি এখনও প্রাথমিক হিসাবে সেট করা হয়নি)। তারপর, নতুন কীসেটটি সমস্ত বাইনারিগুলিতে রোল আউট করা দরকার, যাতে এই কীসেটটি ব্যবহার করা প্রতিটি বাইনারি কীসেটে নতুন কী থাকে৷ শুধুমাত্র তখনই নতুন কীটিকে প্রাথমিক করা উচিত, এবং ফলস্বরূপ কীসেটটি আবার কীসেট ব্যবহার করে সমস্ত বাইনারিগুলিতে বিতরণ করা হবে।

সাইফারটেক্সটে মূল শনাক্তকারী

একটি AEAD কীসেটের উদাহরণ আবার বিবেচনা করুন। যদি সহজভাবে করা হয়, একটি সাইফারটেক্সট ডিক্রিপ্ট করার জন্য টিঙ্ককে কীসেটের সমস্ত কী দিয়ে ডিক্রিপ্ট করার চেষ্টা করতে হবে, কারণ কীসেট এনক্রিপ্ট করতে কোন কী ব্যবহার করা হয়েছে তা জানার কোনো উপায় নেই। এটি একটি বড় কর্মক্ষমতা ওভারহেড হতে পারে.

এই কারণে, টিঙ্ক আইডি থেকে প্রাপ্ত একটি 5-বাইট স্ট্রিং সহ সাইফারটেক্সট উপসর্গ করার অনুমতি দেয়। উপরের 'ফুল কী'-এর দর্শন অনুসরণ করে, এই উপসর্গটি কী-এর অংশ , এবং এই কী দিয়ে প্রাপ্ত সমস্ত সাইফারটেক্সটে এই উপসর্গ থাকা উচিত। ব্যবহারকারীরা যখন কী তৈরি করে, তখন তারা বেছে নিতে পারে কীটি এমন একটি উপসর্গ ব্যবহার করা উচিত কিনা বা এটি ছাড়া একটি সাইফারটেক্সট বিন্যাস ব্যবহার করা উচিত কিনা।

যখন একটি কী একটি কীসেটে থাকে, তখন টিঙ্ক এই ট্যাগটি কীসেটে থাকা কীটির আইডি থেকে গণনা করে। একটি কীসেটের মধ্যে আইডিগুলি অনন্য 2 মানে ট্যাগগুলি অনন্য। তাই, শুধুমাত্র ট্যাগ করা কী ব্যবহার করা হলে, একটি একক কী দিয়ে ডিক্রিপ্ট করার তুলনায় কোনো কার্যক্ষমতার ক্ষতি হয় না: ডিক্রিপ্ট করার সময় টিঙ্ককে শুধুমাত্র একটি কী চেষ্টা করতে হবে।

যাইহোক, যেহেতু ট্যাগটি কী-এর অংশ, তাই এটিও বোঝায় যে কীটি শুধুমাত্র একটি কীসেটে থাকতে পারে যদি এটির একটি নির্দিষ্ট আইডি থাকে। বিভিন্ন ভাষায় মূল বস্তুর বাস্তবায়ন বর্ণনা করার সময় এর কিছু প্রভাব রয়েছে।


  1. Tink-এর কিছু অংশ এখনও কীসেটকে সেট হিসেবে বিবেচনা করে। যাইহোক, এই পরিবর্তন করা উচিত. কারণ হল যে ক্রমটি সাধারণভাবে গুরুত্বপূর্ণ: উদাহরণস্বরূপ, Aead-এর সাথে একটি কী ঘূর্ণনের সাধারণ জীবনচক্র বিবেচনা করুন৷ প্রথমত, একটি কীসেটে একটি নতুন কী যোগ করা হয়। এই কী এখনও প্রাথমিক করা হয়নি, কিন্তু সক্রিয়। এই নতুন কীসেটটি সমস্ত বাইনারিগুলিতে রোল আউট করা হয়েছে৷ একবার সমস্ত বাইনারি নতুন কী জানলে, কীটি প্রাথমিক করা হয় (শুধুমাত্র এই কী ব্যবহার করে নিরাপদ)। এই দ্বিতীয় ধাপে, কী ঘূর্ণন শেষ কী যোগ করা জানতে হবে।

  2. একটি Google অভ্যন্তরীণ লাইব্রেরির সাথে সামঞ্জস্যের জন্য, Tink কীসেটগুলি রাখার অনুমতি দেয় যেখানে আইডিগুলি পুনরাবৃত্তি হয়৷ এই সমর্থন ভবিষ্যতে সরানো হবে.