FIPS 140-3 শংসাপত্রযোগ্য GKI ক্রিপ্টো মডিউল

GKI কার্নেলে fips140.ko নামে একটি লিনাক্স কার্নেল মডিউল অন্তর্ভুক্ত রয়েছে, যা ক্রিপ্টোগ্রাফিক সফটওয়্যার মডিউলের জন্য FIPS 140-3-এর প্রয়োজনীয়তাগুলো মেনে চলে। যদি GKI কার্নেল চালিত পণ্যটির প্রয়োজন হয়, তবে এই মডিউলটি FIPS সার্টিফিকেশনের জন্য জমা দেওয়া যেতে পারে।

ক্রিপ্টো রুটিনগুলি ব্যবহার করার আগে বিশেষ করে নিম্নলিখিত FIPS 140-3 প্রয়োজনীয়তাগুলি অবশ্যই পূরণ করতে হবে:

  • ক্রিপ্টোগ্রাফিক অ্যালগরিদম উপলব্ধ করার আগে মডিউলটিকে অবশ্যই তার নিজস্ব অখণ্ডতা যাচাই করতে হবে।
  • মডিউলটিকে তার অনুমোদিত ক্রিপ্টোগ্রাফিক অ্যালগরিদমগুলো উপলব্ধ করার আগে অবশ্যই ক্রিপ্টোগ্রাফিক অ্যালগরিদম সেলফ-টেস্ট ব্যবহার করে সেগুলোর কার্যকারিতা যাচাই করতে হবে।

কেন একটি পৃথক কার্নেল মডিউল

FIPS 140-3 ভ্যালিডেশন এই ধারণার উপর ভিত্তি করে তৈরি যে, একবার কোনো সফটওয়্যার বা হার্ডওয়্যার-ভিত্তিক মডিউল সার্টিফাইড হয়ে গেলে, তা আর কখনো পরিবর্তন করা হয় না। যদি পরিবর্তন করা হয়, তবে এটিকে অবশ্যই পুনরায় সার্টিফাই করতে হবে। এটি বর্তমানে ব্যবহৃত সফটওয়্যার ডেভেলপমেন্ট প্রক্রিয়ার সাথে সহজে মেলে না, এবং এই প্রয়োজনীয়তার ফলস্বরূপ, FIPS সফটওয়্যার মডিউলগুলোকে সাধারণত ক্রিপ্টোগ্রাফিক উপাদানগুলোর উপর যতটা সম্ভব নিবিড়ভাবে দৃষ্টি নিবদ্ধ রেখে ডিজাইন করা হয়, যাতে ক্রিপ্টোগ্রাফির সাথে সম্পর্কিত নয় এমন কোনো পরিবর্তনের জন্য ক্রিপ্টোগ্রাফির পুনর্মূল্যায়নের প্রয়োজন না হয়।

GKI কার্নেলটি এর সম্পূর্ণ সমর্থিত জীবনকাল জুড়ে নিয়মিত আপডেট করার জন্য তৈরি করা হয়েছে। এর ফলে পুরো কার্নেলটির পক্ষে FIPS মডিউলের সীমানার মধ্যে থাকা সম্ভব নয়, কারণ প্রতিটি কার্নেল আপডেটের পর এই ধরনের মডিউলকে পুনরায় প্রত্যয়িত করতে হবে। "FIPS মডিউল"-কে কার্নেল ইমেজের একটি উপসেট হিসেবে সংজ্ঞায়িত করলে এই সমস্যাটি কিছুটা প্রশমিত হবে, কিন্তু এর সমাধান হবে না, কারণ "FIPS মডিউল"-এর বাইনারি বিষয়বস্তু প্রয়োজনের চেয়ে অনেক বেশি ঘন ঘন পরিবর্তিত হবে।

কার্নেল সংস্করণ ৬.১-এর আগে আরেকটি বিবেচ্য বিষয় ছিল যে, GKI-কে LTO (লিঙ্ক টাইম অপটিমাইজেশন) সক্রিয় রেখে কম্পাইল করা হতো, কারণ কন্ট্রোল ফ্লো ইন্টিগ্রিটির জন্য LTO একটি পূর্বশর্ত ছিল, যা একটি গুরুত্বপূর্ণ নিরাপত্তা বৈশিষ্ট্য।

অতএব, FIPS 140-3-এর আবশ্যিক শর্তাবলীর আওতাভুক্ত সমস্ত কোড fips140.ko নামক একটি পৃথক কার্নেল মডিউলে প্যাকেজ করা হয়, যা শুধুমাত্র সেই GKI কার্নেল সোর্সের স্থিতিশীল ইন্টারফেসগুলোর উপর নির্ভর করে যেখান থেকে এটি তৈরি করা হয়েছে। এর অর্থ হলো, মডিউলটি একই প্রজন্মের বিভিন্ন GKI রিলিজের সাথে ব্যবহার করা যেতে পারে, এবং সার্টিফিকেশনের জন্য এটিকে কেবল তখনই আপডেট ও পুনরায় জমা দিতে হবে, যখন মডিউলটির নিজস্ব কোডের কোনো সমস্যা সমাধান করা হয়।

মডিউলটি কখন ব্যবহার করবেন

GKI কার্নেলের মধ্যেই এমন কোড থাকে যা FIPS 140-3 কার্নেল মডিউলে অন্তর্ভুক্ত ক্রিপ্টো রুটিনগুলোর উপর নির্ভরশীল। তাই, বিল্ট-ইন ক্রিপ্টো রুটিনগুলোকে আসলে GKI কার্নেল থেকে সরানো হয় না, বরং মডিউলের মধ্যে কপি করা হয়। যখন মডিউলটি লোড করা হয়, তখন বিল্ট-ইন ক্রিপ্টো রুটিনগুলোকে Linux CryptoAPI থেকে ডি-রেজিস্টার করা হয় এবং মডিউলের অন্তর্ভুক্ত রুটিনগুলো দ্বারা প্রতিস্থাপিত করা হয়।

এর মানে হলো, fips140.ko মডিউলটি সম্পূর্ণ ঐচ্ছিক, এবং কেবলমাত্র তখনই এটি স্থাপন করা যুক্তিযুক্ত যখন FIPS 140-3 সার্টিফিকেশন একটি আবশ্যিক শর্ত। এর বাইরে, মডিউলটি কোনো অতিরিক্ত সক্ষমতা প্রদান করে না, এবং অপ্রয়োজনে এটি লোড করলে কোনো সুবিধা ছাড়াই কেবল বুট টাইমের ওপর প্রভাব পড়ার সম্ভাবনা থাকে।

মডিউলটি কীভাবে স্থাপন করবেন

নিম্নলিখিত ধাপগুলো অনুসরণ করে মডিউলটি অ্যান্ড্রয়েড বিল্ডে অন্তর্ভুক্ত করা যেতে পারে:

  • BOARD_VENDOR_RAMDISK_KERNEL_MODULES এ মডিউলের নামটি যোগ করুন। এর ফলে মডিউলটি ভেন্ডর র‍্যামডিস্কে কপি হয়ে যাবে।
  • BOARD_VENDOR_RAMDISK_KERNEL_MODULES_LOAD এ মডিউলের নামটি যোগ করুন। এর ফলে টার্গেটের modules.load এ মডিউলের নামটি যুক্ত হয়ে যায়। ডিভাইস বুট করার সময় init দ্বারা যে মডিউলগুলো লোড করা হয়, modules.load সেগুলোর তালিকা থাকে।

সততা স্ব-পরীক্ষা

FIPS 140-3 কার্নেল মডিউলটি, মডিউল লোড হওয়ার সময়, তার নিজস্ব .code এবং .rodata সেকশনগুলোর HMAC-SHA256 ডাইজেস্ট গ্রহণ করে এবং সেটিকে মডিউলে রেকর্ড করা ডাইজেস্টের সাথে তুলনা করে। এই প্রক্রিয়াটি সম্পন্ন হয় লিনাক্স মডিউল লোডার কর্তৃক ঐ সেকশনগুলোতে ELF রিলোকেশন প্রসেসিং এবং CPU এরাটার জন্য অল্টারনেটিভ প্যাচিং-এর মতো সাধারণ পরিবর্তনগুলো ইতোমধ্যেই করে ফেলার পর। ডাইজেস্টটি যাতে সঠিকভাবে পুনরুৎপাদন করা যায়, তা নিশ্চিত করার জন্য নিম্নলিখিত অতিরিক্ত পদক্ষেপগুলো গ্রহণ করা হয়:

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

ক্রিপ্টোগ্রাফিক অ্যালগরিদম স্ব-পরীক্ষা করে

FIPS 140-3 কার্নেল মডিউলটি জ্ঞাত-উত্তর পরীক্ষা (known-answer tests) বাস্তবায়নের মাধ্যমে FIPS 140-3-এর ক্রিপ্টোগ্রাফিক অ্যালগরিদম স্ব-পরীক্ষার প্রয়োজনীয়তা পূরণ করে। বাস্তবায়িত পরীক্ষাগুলো অ্যালগরিদম অনুসারে ভিন্ন হয় এবং FIPS 140-3 ইমপ্লিমেন্টেশন গাইডেন্স 10.3.A মেনে চলে।

সাধারণত, প্রতিটি অ্যালগরিদমের জন্য কেবল একটি টেস্ট ভেক্টরই যথেষ্ট। FIPS ক্রিপ্টোগ্রাফিক অ্যালগরিদমের সেলফ-টেস্টগুলো শুধুমাত্র মৌলিক কার্যকারিতা যাচাই করার জন্য ডিজাইন করা হয়েছে। ক্রিপ্টোগ্রাফিক অ্যালগরিদম ভ্যালিডেশন প্রোগ্রাম (CAVP) এবং আপস্ট্রিম কার্নেলের ক্রিপ্টোগ্রাফিক টেস্ট স্যুট ব্যবহার করে বিস্তারিত টেস্টিং আলাদাভাবে সম্পন্ন করা হয়।

যখন কোনো অ্যালগরিদমের একাধিক ইমপ্লিমেন্টেশন থাকে যা ব্যবহারকারীর কাছে অ্যাক্সেসযোগ্য অথবা মডিউলের পরিষেবাগুলো দ্বারা ব্যবহৃত হয়, তখন FIPS 140-3 অনুযায়ী সেই সমস্ত ইমপ্লিমেন্টেশনকে অবশ্যই সেলফ-টেস্ট করতে হয়। এটি লিনাক্স ক্রিপ্টোএপিআই (Linux CryptoAPI) দ্বারা ঐতিহ্যগতভাবে ব্যবহৃত ইন্টিগ্রেশন কৌশলের ক্ষেত্রে প্রাসঙ্গিক, যেখানে প্রতিটি অ্যালগরিদমের একাধিক ব্যবহারকারী-অ্যাক্সেসযোগ্য ইমপ্লিমেন্টেশন থাকতে পারে। উদাহরণস্বরূপ, android16-6.12 কার্নেলে, SHA-256-এর তিনটি ইমপ্লিমেন্টেশন রয়েছে: sha256-generic , sha256-arm64 , এবং sha256-ce । ARMv8 ক্রিপ্টো এক্সটেনশনযুক্ত সিপিইউগুলোতে ডিফল্টরূপে sha256-ce ব্যবহৃত হয়, কিন্তু ব্যবহারকারীরা অন্যগুলোও স্পষ্টভাবে অ্যাক্সেস করতে পারেন। তাই, মডিউলটি এই তিনটি ইমপ্লিমেন্টেশনকেই সেলফ-টেস্ট করে।

android17-6.18 এবং এর পরবর্তী কার্নেলে, কিছু অ্যালগরিদম একটি সরলতর ইন্টিগ্রেশন কৌশল ব্যবহার করে। উদাহরণস্বরূপ, android17-6.18 কার্নেলে, SHA-256-এর একটিমাত্র ইমপ্লিমেন্টেশন sha256-lib রয়েছে, যা মডিউল লোড হওয়ার সময় সিপিইউ-এর জন্য স্বয়ংক্রিয়ভাবে উপযুক্ত কোড নির্বাচন করে। ফলে, মডিউলটি কেবল sha256-lib কেই সেলফ-টেস্ট করে।

মডিউলে অন্তর্ভুক্ত অ্যালগরিদমগুলি

FIPS 140-3 মডিউলে অন্তর্ভুক্ত সমস্ত অ্যালগরিদম নিম্নরূপ তালিকাভুক্ত করা হলো। এটি android12-5.10 , android13-5.10 , android13-5.15 , android14-5.15 , android14-6.1 , android15-6.6 , android16-6.12 , এবং android17-6.18 কার্নেল শাখাগুলোর ক্ষেত্রে প্রযোজ্য, যদিও কার্নেল সংস্করণগুলোর মধ্যকার পার্থক্যগুলো যথোপযুক্ত ক্ষেত্রে উল্লেখ করা হয়েছে।

অ্যালগরিদম বাস্তবায়ন অনুমোদনযোগ্য সংজ্ঞা
aes aes-generic , aes-arm64 , aes-ce , AES লাইব্রেরি হ্যাঁ সাধারণ AES ব্লক সাইফার, কোনো অপারেশন মোড ছাড়া: সব ধরনের কী সাইজ (১২৮ বিট, ১৯২ বিট এবং ২৫৬ বিট) সমর্থিত। লাইব্রেরি ইমপ্লিমেন্টেশন ছাড়া অন্য সব ইমপ্লিমেন্টেশন একটি টেমপ্লেটের মাধ্যমে অপারেশন মোডের সাথে যুক্ত করা যায়।
cmac(aes) cmac (টেমপ্লেট), cmac-aes-neon , cmac-aes-ce হ্যাঁ AES-CMAC: সকল AES কী সাইজ সমর্থিত। cmac( ) ব্যবহার করে aes এর যেকোনো ইমপ্লিমেন্টেশন দিয়ে cmac টেমপ্লেটটি কম্পোজ করা যায়। cmac( ) বাস্তবায়নগুলো স্বতন্ত্র।
ecb(aes) ecb (টেমপ্লেট), ecb-aes-neon , ecb-aes-neonbs , ecb-aes-ce হ্যাঁ AES-ECB: সকল AES কী সাইজ সমর্থিত। ecb( ) ব্যবহার করে aes এর যেকোনো ইমপ্লিমেন্টেশন দিয়ে ecb টেমপ্লেটটি তৈরি করা যায়। ecb( ) বাস্তবায়নগুলো স্বতন্ত্র।
cbc(aes) cbc (টেমপ্লেট), cbc-aes-neon , cbc-aes-neonbs , cbc-aes-ce হ্যাঁ AES-CBC: সকল AES কী সাইজ সমর্থিত। cbc টেমপ্লেটটি cbc( ) ব্যবহার করে aes এর যেকোনো ইমপ্লিমেন্টেশন দিয়ে কম্পোজ করা যায়। cbc( ) বাস্তবায়নগুলো স্বতন্ত্র।
cts(cbc(aes)) cts (টেমপ্লেট), cts-cbc-aes-neon , cts-cbc-aes-ce হ্যাঁ AES-CBC-CTS অথবা সাইফারটেক্সট স্টিলিং সহ AES-CBC: ব্যবহৃত কনভেনশনটি হলো CS3 ; শেষের দুটি সাইফারটেক্সট ব্লক নিঃশর্তভাবে অদলবদল করা হয়। সমস্ত AES কী সাইজ সমর্থিত। cts টেমপ্লেটটি cts( ) ব্যবহার করে cbc এর যেকোনো ইমপ্লিমেন্টেশনের সাথে কম্পোজ করা যেতে পারে। cts( ) বাস্তবায়নগুলো স্বতন্ত্র।
ctr(aes) ctr (টেমপ্লেট), ctr-aes-neon , ctr-aes-neonbs , ctr-aes-ce হ্যাঁ AES-CTR: সকল AES কী সাইজ সমর্থিত। ctr টেমপ্লেটটি ctr( ) ব্যবহার করে aes এর যেকোনো ইমপ্লিমেন্টেশন দিয়ে তৈরি করা যায়। ctr( ) বাস্তবায়নগুলো স্বতন্ত্র।
xts(aes) xts (টেমপ্লেট), xts-aes-neon , xts-aes-neonbs , xts-aes-ce হ্যাঁ AES-XTS: কার্নেল ৬.১ এবং তার নিচের সংস্করণগুলিতে সমস্ত AES কী সাইজ সমর্থিত; কার্নেল ৬.৬ এবং তার উপরের সংস্করণগুলিতে শুধুমাত্র AES-128 এবং AES-256 সমর্থিত। xts টেমপ্লেটটি xts( ) ব্যবহার করে ecb(aes) এর যেকোনো ইমপ্লিমেন্টেশনের সাথে কম্পোজ করা যেতে পারে। xts( ) বাস্তবায়নগুলো স্বতন্ত্র। সমস্ত বাস্তবায়নই FIPS-এর প্রয়োজনীয় দুর্বল কী যাচাইকরণ প্রয়োগ করে; অর্থাৎ, যে সমস্ত XTS কী-এর প্রথম এবং দ্বিতীয় অংশ সমান, সেগুলোকে বাতিল করা হয়।
gcm(aes) gcm (টেমপ্লেট), gcm-aes-ce নং AES-GCM: সকল AES কী সাইজ সমর্থিত। শুধুমাত্র ৯৬-বিট IV সমর্থিত। এই মডিউলের অন্য সকল AES মোডের মতোই, কলার IV সরবরাহ করার জন্য দায়ী। gcm_base( , ) ব্যবহার করে ctr(aes) এবং ghash এর যেকোনো ইমপ্লিমেন্টেশনের সাথে gcm টেমপ্লেটটি কম্পোজ করা যেতে পারে। gcm_base( , ) বাস্তবায়নগুলো স্বতন্ত্র।
sha1 কার্নেল ৬.১২ এবং তার নিচের সংস্করণ: sha1-generic , sha1-ce হ্যাঁ SHA-1 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন। কার্নেল ৬.১৮ এবং তার পরবর্তী সংস্করণ থেকে এটি অপসারণ করা হয়েছে।
sha224 কার্নেল ৬.১৮ এবং উচ্চতর: sha224-lib । কার্নেল ৬.১২ এবং নিম্নতর: sha224-generic , sha224-arm64 , sha224-ce হ্যাঁ SHA-224 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন: এই কোডটি SHA-256-এর সাথে ব্যবহৃত হয়।
sha256 কার্নেল ৬.১৮ এবং উচ্চতর: sha256-lib । কার্নেল ৬.১২ এবং নিম্নতর: sha256-generic , sha256-arm64 , sha256-ce , SHA-256 লাইব্রেরি হ্যাঁ SHA-256 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন।
sha384 কার্নেল ৬.১৮ এবং উচ্চতর: sha384-lib । কার্নেল ৬.১২ এবং নিম্নতর: sha384-generic , sha384-arm64 , sha384-ce হ্যাঁ SHA-384 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন: এই কোডটি SHA-512-এর সাথে ব্যবহৃত হয়।
sha512 কার্নেল ৬.১৮ এবং উচ্চতর: sha512-lib । কার্নেল ৬.১২ এবং নিম্নতর: sha512-generic , sha512-arm64 , sha512-ce হ্যাঁ SHA-512 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন।
sha3-224 কার্নেল ৬.৬ এবং উচ্চতর সংস্করণ: sha3-224-generic হ্যাঁ SHA3-224 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন।
sha3-256 কার্নেল ৬.৬ এবং উচ্চতর সংস্করণ: sha3-256-generic হ্যাঁ পূর্বেরটির মতোই, কিন্তু ২৫৬-বিট ডাইজেস্ট দৈর্ঘ্য (SHA3-256) সহ। সমস্ত ডাইজেস্ট দৈর্ঘ্য একই Keccak বাস্তবায়ন ব্যবহার করে।
sha3-384 কার্নেল ৬.৬ এবং উচ্চতর সংস্করণ: sha3-384-generic হ্যাঁ পূর্বেরটির মতোই, কিন্তু ৩৮৪-বিট ডাইজেস্ট দৈর্ঘ্য (SHA3-384) সহ। সমস্ত ডাইজেস্ট দৈর্ঘ্য একই Keccak বাস্তবায়ন ব্যবহার করে।
sha3-512 কার্নেল ৬.৬ এবং উচ্চতর সংস্করণ: sha3-512-generic হ্যাঁ পূর্বেরটির মতোই, কিন্তু ৫১২-বিট ডাইজেস্ট দৈর্ঘ্য (SHA3-512) সহ। সমস্ত ডাইজেস্ট দৈর্ঘ্য একই Keccak বাস্তবায়ন ব্যবহার করে।
hmac hmac (টেমপ্লেট) হ্যাঁ কীড-হ্যাশ মেসেজ অথেন্টিকেশন কোড (HMAC): hmac টেমপ্লেটটি hmac( ) ব্যবহার করে যেকোনো SHA অ্যালগরিদম বা ইমপ্লিমেন্টেশন দিয়ে তৈরি করা যেতে পারে। hmac( ) অথবা hmac( ) .
stdrng সকল কার্নেল: drbg_pr_hmac_sha256 , drbg_pr_hmac_sha384 , drbg_pr_hmac_sha512 । কার্নেল ৬.৬ এবং তার নিচের সংস্করণ: drbg_pr_hmac_sha1 হ্যাঁ নির্দিষ্ট হ্যাশ ফাংশন ব্যবহার করে এবং প্রেডিকশন রেজিস্ট্যান্স সক্রিয় করে HMAC_DRBG ইনস্ট্যানশিয়েট করা হয়েছে: এতে হেলথ চেক অন্তর্ভুক্ত রয়েছে। এই ইন্টারফেসের ব্যবহারকারীরা তাদের নিজস্ব DRBG ইনস্ট্যান্স পেয়ে থাকেন।
stdrng সকল কার্নেল: drbg_nopr_hmac_sha256 , drbg_nopr_hmac_sha384 , drbg_nopr_hmac_sha512 । কার্নেল ৬.৬ এবং তার নিচের সংস্করণ: drbg_nopr_hmac_sha1 হ্যাঁ drbg_pr_* অ্যালগরিদমগুলোর মতোই, কিন্তু প্রেডিকশন রেজিস্ট্যান্স নিষ্ক্রিয় করা আছে। এই কোডটি প্রেডিকশন-রেজিস্ট্যান্ট ভ্যারিয়েন্টের সাথে শেয়ার করা হয়। কার্নেল 5.10-এ, সর্বোচ্চ-অগ্রাধিকারের DRBG হলো drbg_nopr_hmac_sha256 । কার্নেল 5.15 এবং তার পরবর্তী সংস্করণগুলোতে, এটি হলো drbg_pr_hmac_sha512
jitterentropy_rng jitterentropy_rng না জিটার আরএনজি (Jitter RNG), হয় সংস্করণ ২.২.০ (কার্নেল সংস্করণ ৬.১ এবং তার নিচের জন্য) অথবা সংস্করণ ৩.৪.০ (কার্নেল সংস্করণ ৬.৬ এবং তার উপরের জন্য)। এই ইন্টারফেসের ব্যবহারকারীরা তাদের নিজস্ব জিটার আরএনজি ইনস্ট্যান্স পান। তারা ডিআরবিজি (DRBG) দ্বারা ব্যবহৃত ইনস্ট্যান্সগুলো পুনরায় ব্যবহার করেন না।
xcbc(aes) xcbc-aes-neon , xcbc-aes-ce না
xctr(aes) কার্নেল ৫.১৫ এবং উচ্চতর সংস্করণ: xctr-aes-neon , xctr-aes-ce না
cbcmac(aes) cbcmac-aes-neon , cbcmac-aes-ce না
essiv(cbc(aes),sha256) essiv-cbc-aes-sha256-neon , essiv-cbc-aes-sha256-ce না

মডিউলটির AES -GCM ইমপ্লিমেন্টেশনগুলো অ্যালগরিদম হিসেবে অনুমোদিত হতে পারে, কিন্তু মডিউল হিসেবে অনুমোদিত নাও হতে পারে। সেগুলোকে ভ্যালিডেট করা গেলেও, FIPS মডিউলের দৃষ্টিকোণ থেকে AES-GCM-কে একটি অনুমোদিত অ্যালগরিদম হিসেবে বিবেচনা করা যায় না। এর কারণ হলো, GCM-এর জন্য FIPS মডিউলের আবশ্যকতাগুলো সেইসব GCM ইমপ্লিমেন্টেশনের সাথে বেমানান, যেগুলো নিজস্ব IV তৈরি করে না।

সোর্স থেকে মডিউলটি তৈরি করুন

অ্যান্ড্রয়েড ১৪ এবং তার পরবর্তী সংস্করণ ( android-mainline সহ)-এর জন্য, নিম্নলিখিত কমান্ডগুলো ব্যবহার করে সোর্স থেকে fips140.ko মডিউলটি বিল্ড করুন।

  • বেজেল দিয়ে তৈরি করুন:

    tools/bazel run //common:fips140_dist
  • build.sh (পুরানো সংস্করণ) দিয়ে বিল্ড করুন:

    BUILD_CONFIG=common/build.config.gki.aarch64.fips140 build/build.sh

এই কমান্ডগুলো কার্নেল এবং fips140.ko মডিউল সহ একটি সম্পূর্ণ বিল্ড সম্পাদন করে, যার মধ্যে HMAC-SHA256 ডাইজেস্টের বিষয়বস্তু এমবেড করা থাকে।

শেষ ব্যবহারকারীর নির্দেশিকা

ক্রিপ্টো অফিসারের নির্দেশনা

কার্নেল মডিউলটি পরিচালনা করার জন্য, অপারেটিং সিস্টেমকে অবশ্যই একটি একক অপারেটর মোডে সীমাবদ্ধ রাখতে হবে। অ্যান্ড্রয়েড প্রসেসরের মেমরি ম্যানেজমেন্ট হার্ডওয়্যার ব্যবহার করে স্বয়ংক্রিয়ভাবে এই কাজটি করে থাকে।

কার্নেল মডিউলটি আলাদাভাবে ইনস্টল করা যায় না; এটি ডিভাইস ফার্মওয়্যারের অংশ হিসেবে অন্তর্ভুক্ত থাকে এবং বুট করার সময় স্বয়ংক্রিয়ভাবে লোড হয়। এটি শুধুমাত্র একটি অনুমোদিত কার্যপ্রণালীতে কাজ করে।

ক্রিপ্টো অফিসার যেকোনো সময় ডিভাইসটি রিস্টার্ট করার মাধ্যমে সেলফ-টেস্টগুলো চালাতে পারেন।

ব্যবহারকারীর নির্দেশিকা

কার্নেল মডিউলের ব্যবহারকারী হলো কার্নেলের অন্যান্য উপাদানসমূহ, যাদের ক্রিপ্টোগ্রাফিক অ্যালগরিদম ব্যবহার করার প্রয়োজন হয়। কার্নেল মডিউল অ্যালগরিদম ব্যবহারের ক্ষেত্রে কোনো অতিরিক্ত লজিক প্রদান করে না এবং একটি ক্রিপ্টোগ্রাফিক অপারেশন সম্পাদনের জন্য প্রয়োজনীয় সময় ব্যতীত অন্য কোনো প্যারামিটার সংরক্ষণ করে না।

FIPS সম্মতি পালনের উদ্দেশ্যে অ্যালগরিদমগুলির ব্যবহার শুধুমাত্র অনুমোদিত অ্যালগরিদমগুলির মধ্যেই সীমাবদ্ধ। FIPS 140-3 "পরিষেবা সূচক" প্রয়োজনীয়তা পূরণের জন্য, মডিউলটি fips140_is_approved_service নামক একটি ফাংশন প্রদান করে, যা নির্দেশ করে যে কোনো অ্যালগরিদম অনুমোদিত কিনা।

স্ব-পরীক্ষার ত্রুটি

সেলফ টেস্ট ব্যর্থ হলে, কার্নেল মডিউল কার্নেলকে প্যানিক করে এবং ডিভাইসটি বুট হওয়া চালিয়ে যায় না। যদি ডিভাইসটি রিবুট করার পরেও সমস্যার সমাধান না হয়, তবে ডিভাইসটিকে অবশ্যই রিকভারি মোডে বুট করে রি-ফ্ল্যাশিংয়ের মাধ্যমে সমস্যাটি সংশোধন করতে হবে।