Tink তারের বিন্যাস

এই পৃষ্ঠাটি কী এবং আদিম আউটপুটের জন্য Tink এর তারের বিন্যাস বর্ণনা করে। ডকুমেন্টেশনটি ক্রিপ্টোগ্রাফারদের লক্ষ্য করে যারা Tink-এ অতিরিক্ত ভাষা যোগ করতে চান এবং অন্যান্য উচ্চ-স্তরের ক্রিপ্টো লাইব্রেরির রক্ষণাবেক্ষণকারী যারা একটি তারের সামঞ্জস্যপূর্ণ মোড চান। এটি সাধারণ শ্রোতাদের উদ্দেশ্যে নয়।

কীসেট সিরিয়ালাইজেশন

টিঙ্ক তার কীসেটগুলিকে সিরিয়ালাইজ করতে Google প্রোটোবাফ ব্যবহার করে।

  • একটি বাইনারি সিরিয়ালাইজড কীসেট হল একটি ক্রমিক কীসেট প্রোটো যা tink.proto এ সংজ্ঞায়িত করা হয়েছে। একটি কী এর KeyData মান বৈশিষ্ট্য হল সংশ্লিষ্ট কী প্রকারের একটি ক্রমিক প্রোটো।
  • একটি JSON ক্রমিক কীসেট হল একটি কীসেট প্রোটো যা JSON বিন্যাসে সিরিয়াল করা হয়। মনে রাখবেন যে কী-ডেটা মান এখনও একটি বাইনারি সিরিয়ালাইজড প্রোটো।
  • একটি এনক্রিপ্ট করা কীসেট হল tink.proto- এ সংজ্ঞায়িত একটি সিরিয়ালাইজড এনক্রিপ্টেড কিস্ট প্রোটো। এটিতে একটি এনক্রিপ্ট করা বাইনারি সিরিয়ালাইজড কীসেট এবং ঐচ্ছিকভাবে কিছু আনক্রিপ্ট করা KeysetInfo মেটাডেটা রয়েছে।

Tink আউটপুট উপসর্গ

বেশিরভাগ টিঙ্ক আদিম একটি 5 বাইট আউটপুট উপসর্গ সমর্থন করে যার মধ্যে রয়েছে:

  • 1 বাইট সংস্করণ: 0x01
  • 4 বাইট কী ইঙ্গিত: এটি ব্যবহৃত কীটির কী আইডি।

কিছু লিগ্যাসি কী বাইট 0x00 সংস্করণ সমর্থন করতে পারে।

মনে রাখবেন যে এই উপসর্গটি প্রমাণীকৃত নয় এবং নিরাপত্তার উদ্দেশ্যে এর উপর নির্ভর করা যাবে না। টিঙ্ক এটিকে ডিক্রিপশন বা যাচাইকরণের গতি বাড়ানোর জন্য একটি ইঙ্গিত হিসাবে ব্যবহার করে।

AEAD

সাধারণভাবে, টিঙ্ক AEAD সাইফারটেক্সটকে এইভাবে ফর্ম্যাট করে:

prefix || IV || ciphertext || tag

অন্যথায় সংশ্লিষ্ট RFC-তে নির্দিষ্ট করা না থাকলে। prefix হয় খালি অথবা একটি 5 বাইট Tink আউটপুট উপসর্গ।

AES-CTR-HMAC

AES-CTR-HMAC-এর জন্য, Tink নিম্নরূপ সংশ্লিষ্ট ডেটা (AD) সহ MAC গণনা করে:

AD || IV || ciphertext || bitlen(AD)

যেখানে bitlen(AD) হল AD এর দৈর্ঘ্য বিটগুলিতে 64-বিট বিগ-এন্ডিয়ান স্বাক্ষরবিহীন পূর্ণসংখ্যা হিসাবে উপস্থাপিত। এই HMAC স্কিমটি ম্যাকগ্রু থেকে AES-CBC-HMAC-এর খসড়া অনুসরণ করে।

ডিটারমিনিস্টিক AEAD

Tink AES-SIV-এর জন্য RFC 5297 প্রয়োগ করে, সিফারটেক্সটের শুরুতে সিন্থেটিক ইনিশিয়ালাইজেশন ভেক্টর (SIV) রাখে। আদিম একটি 5 বাইট Tink আউটপুট উপসর্গ যোগ করতে পারে.

যদিও RFC 5297 সম্পর্কিত ডেটাগুলির একটি তালিকা সমর্থন করে, Tink শুধুমাত্র একটি সম্পর্কিত ডেটা সমর্থন করে, যা RFC 5297-এর একটি উপাদান সহ একটি তালিকার সাথে মিলে যায়৷ একটি খালি সংশ্লিষ্ট ডেটা হল একটি খালি উপাদান সহ একটি তালিকা, একটি খালি তালিকা নয়৷

AEAD স্ট্রিমিং

AES-CTR HMAC এবং AES-GCM-HKDF দেখুন।

খাম এনক্রিপশন

এনভেলপ এনক্রিপশন টিঙ্কের AEAD আদিম ব্যবহার করে ডেটা এনক্রিপশন কী DEK দিয়ে ডেটা এনক্রিপ্ট করে। এনক্রিপশন নিম্নরূপ কাজ করে:

  • প্রদত্ত কী টেমপ্লেট (বা কী প্যারামিটার) ব্যবহার করে একটি নতুন DEK তৈরি করা হয়।
  • DEK একটি বাইট স্ট্রিং মধ্যে ক্রমিক করা হয়. সিরিয়ালাইজেশন ফরম্যাট প্রোটোকল বাফার ক্রমিক কী ধরনের প্রোটোর। উদাহরণ স্বরূপ, এটি একটি ক্রমিক AesGcmKey প্রোটোকল বাফার বার্তা যা aes_gcm.proto- এ DEK-এর কী ধরনের AES GCM-এর জন্য সংজ্ঞায়িত করা হয়েছে। কিভাবে একটি প্রোটোকল বাফার সিরিয়ালাইজ করতে হয় তার জন্য প্রোটোকল বাফার সিরিয়ালাইজেশন দেখুন।
  • ক্রমিককৃত DEK একটি বহিরাগত প্রদানকারী (উদাহরণস্বরূপ, GCP) দ্বারা একটি encrypted DEK তে এনক্রিপ্ট করা হয়।
  • ciphertext সংশ্লিষ্ট ডেটা সহ প্লেইনটেক্সট এনক্রিপ্ট করতে DEK ব্যবহার করা হয়। তাই ciphertext DEK এর সাথে সম্পর্কিত AEAD আদিম ফর্ম্যাটটির ঠিক একই বিন্যাস রয়েছে।

খাম এনক্রিপশনের আউটপুট বিন্যাস নিম্নরূপ:

encrypted DEK length || encrypted DEK || ciphertext

encrypted DEK length 4 বাইট, encrypted DEK এর দৈর্ঘ্যকে 32-বিট বিগ-এন্ডিয়ান পূর্ণসংখ্যা হিসাবে সংরক্ষণ করে।

ম্যাক

Tink সংশ্লিষ্ট RFC অনুসরণ করে। আদিমরা ট্যাগে একটি 5 বাইট Tink আউটপুট উপসর্গ যোগ করতে পারে।

পিআরএফ সেট

Tink সংশ্লিষ্ট RFC অনুসরণ করে। উল্লেখ্য যে PRF সেটের জন্য কী টাইপ একই অ্যালগরিদমের MAC কী ধরনের থেকে আউটপুট দৈর্ঘ্য অন্তর্ভুক্ত না করে আলাদা। পিআরএফ সেট কী কখনোই টিঙ্ক আউটপুট উপসর্গ যোগ করে না। এটি নিশ্চিত করে যে আউটপুটটি আসলে একটি PRF।

হাইব্রিড এনক্রিপশন

Tink হাইব্রিড এনক্রিপশনের জন্য সাধারণ তারের বিন্যাস নিম্নরূপ:

prefix || encapsulated_key || encrypted_data

prefix হয় খালি অথবা একটি 5 বাইট Tink আউটপুট উপসর্গ। প্রতিটি কী প্রকারে কতগুলি বাইট পার্স করতে হবে এবং কিভাবে encapsulated_key থেকে সেই বাইটগুলিকে পার্স করতে হবে তার তথ্য থাকে।

HPKE (হাইব্রিড পাবলিক কী এনক্রিপশন)

Tink RFC 9180- এ সংজ্ঞায়িত HPKE মান অনুসরণ করে। একটি HPKE সাইফারসুইট নিম্নলিখিত তিনটি আদিম অন্তর্ভুক্ত করে।

  • কী এনক্যাপসুলেশন মেকানিজম (কেইএম)
  • কী ডেরিভেশন ফাংশন (KDF)
  • সংশ্লিষ্ট ডেটার সাথে প্রমাণীকৃত এনক্রিপশন (AEAD)

HPKE মান RFC 9180, সেকশন 10- এ একটি সাধারণ তারের বিন্যাস সংজ্ঞায়িত করে না। Tink এর HPKE বাস্তবায়ন নিম্নলিখিত encapsulated_key এবং encrypted_data মান ব্যবহার করে।

  • encapsulated_key
    • প্রেরকের সিরিয়ালাইজড পাবলিক কী
    • RFC 9180, বিভাগ 4.1-enc হিসাবে সংজ্ঞায়িত করা হয়েছে
    • ব্যবহৃত নির্দিষ্ট HPKE KEM দ্বারা নির্ধারিত বিন্যাস
  • encrypted_data
    • সাইফারটেক্সট এবং ট্যাগ (যেমন, ciphertext || tag )
    • RFC 9180, বিভাগ 4-ct হিসাবে সংজ্ঞায়িত করা হয়েছে
    • ব্যবহৃত নির্দিষ্ট HPKE AEAD দ্বারা নির্ধারিত বিন্যাস
X25519 ডিফি-হেলম্যান-ভিত্তিক KEM

X25519 DHKEM-এর জন্য, মান enc হল প্রেরকের 32-বাইট ডিফি-হেলম্যান পাবলিক কী।

ECIES-AEAD-HKDF

Tink-এর ECIES-AEAD-HKDF বাস্তবায়নের জন্য, encapsulated_key হল কী এনক্যাপসুলেশন মেকানিজম (KEM) এর আউটপুট এবং encrypted_data হল ডেটা এনক্যাপসুলেশন মেকানিজম (DEM) এর আউটপুট।

কে.ই.এম

কী ধরনের উপর নির্ভর করে, Tink RFC 8422 / ANSI.X9-62.2005 এনকোডিং মান অনুসরণ করে সংকুচিত এবং অসংকুচিত উপবৃত্তাকার কার্ভ পয়েন্ট ব্যবহার করে। সংকুচিত বিন্দুর জন্য, বাইট 0x04 অনুসরণ করা হয় x এবং y স্থানাঙ্ক স্থির আকারের পূর্ণসংখ্যা হিসাবে। সংকুচিত স্থানাঙ্কের জন্য, বাইট 0x02 বা 0x03 এবং x স্থানাঙ্ক একটি নির্দিষ্ট আকারের পূর্ণসংখ্যা হিসাবে ব্যবহৃত হয়। X25519 এর জন্য, RFC 7748 সংজ্ঞা ব্যবহার করা হয় ( নির্দিষ্ট আকারের পূর্ণসংখ্যা হিসাবে x সমন্বয়)।

ডিইএম

encrypted_data জন্য, টিঙ্ক AEAD-এর মতো একই বিন্যাস ব্যবহার করে। এর মধ্যে একটি IV নির্দিষ্ট করা অন্তর্ভুক্ত।

কী ডেরিভেশন

প্রথমে শেয়ার করা পয়েন্টের x স্থানাঙ্ক x_ss গণনা করা হয়। AEAD এর জন্য কী তারপর সেট করা হয়েছে:

HKDF(ikm = encapsulated_key || x_ss, salt = salt_of_key, info = context_info, length = dem_key_size)

যেখানে encapsulated_key বাইট হিসাবে সম্পূর্ণ KEM আউটপুট।

ডিজিটাল স্বাক্ষর

Tink সংশ্লিষ্ট RFC অনুসরণ করে। আদিমরা তৈরি করা ট্যাগে একটি 5 বাইট Tink আউটপুট উপসর্গ যোগ করতে পারে।

ইসিডিএসএ

কী-তে EcdsaSignatureEncoding ক্ষেত্রের উপর নির্ভর করে, ECDSA স্বাক্ষরের বিন্যাস হয় IEEE P1363 বা ASN.1 DER

IEEE P1363 স্বাক্ষরের বিন্যাস হল r || s , যেখানে r এবং s শূন্য-প্যাডেড এবং বক্ররেখার ক্রম হিসাবে বাইটে একই আকার রয়েছে। উদাহরণস্বরূপ, NIST P-256 বক্ররেখার জন্য, r এবং s 32 বাইটে শূন্য-প্যাডেড।

DER স্বাক্ষরটি ASN.1 ব্যবহার করে এনকোড করা হয়েছে:

ECDSA-Sig-Value :: = SEQUENCE { r INTEGER, s INTEGER }

বিশেষ করে, এনকোডিং হল:

0x30 || totalLength || 0x02 || r's length || r || 0x02 || s's length || s

Tink শুধুমাত্র DER এনকোডেড ECDSA স্বাক্ষর গ্রহণ করে (বিকল্প BER এনকোডেড স্বাক্ষর অবৈধ) স্বাক্ষর যাচাইয়ের জন্য সর্বোত্তম অনুশীলন অনুসরণ করে।

এটি স্বাক্ষর নমনীয়তা আক্রমণ প্রতিরোধ করতে সাহায্য করে, যা প্রায়ই ক্রিপ্টোকারেন্সি সিস্টেমকে প্রভাবিত করে