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

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

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

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

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

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

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

কার্নেল সংস্করণ 6.1 এর আগে, আরেকটি বিবেচনা ছিল যে 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 এ মডিউল নাম যোগ করা হবে। modules.load ডিভাইস বুট করার সময় init দ্বারা লোড করা মডিউলগুলির তালিকা ধারণ করে।

অখণ্ডতা স্ব পরীক্ষা

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

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

পরিচিত উত্তর স্ব পরীক্ষা

যেকোন বাস্তবায়িত অ্যালগরিদম যা FIPS 140-3 প্রয়োজনীয়তা দ্বারা আচ্ছাদিত হয় ব্যবহার করার আগে একটি পরিচিত-উত্তর স্ব-পরীক্ষা করতে হবে। FIPS 140-3 ইমপ্লিমেন্টেশন গাইডেন্স 10.3.A অনুযায়ী, সমর্থিত কী দৈর্ঘ্যের যেকোনো একটি ব্যবহার করে অ্যালগরিদম প্রতি একটি একক পরীক্ষা ভেক্টর সাইফারের জন্য যথেষ্ট, যতক্ষণ না এনক্রিপশন এবং ডিক্রিপশন উভয়ই পরীক্ষা করা হয়।

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

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

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

অ্যালগরিদম বাস্তবায়ন অনুমোদনযোগ্য সংজ্ঞা
aes aes-generic , aes-arm64 , aes-ce , AES লাইব্রেরি হ্যাঁ প্লেইন AES ব্লক সাইফার, অপারেশনের কোন মোড ছাড়াই: সমস্ত কী মাপ (128 বিট, 192 বিট এবং 256 বিট) সমর্থিত। লাইব্রেরি বাস্তবায়ন ব্যতীত অন্য সমস্ত বাস্তবায়ন একটি টেমপ্লেটের মাধ্যমে অপারেশনের একটি মোড দিয়ে তৈরি করা যেতে পারে।
cmac(aes) cmac (টেমপ্লেট), cmac-aes-neon , cmac-aes-ce হ্যাঁ AES-CMAC: সমস্ত AES কী মাপ সমর্থিত। cmac টেমপ্লেটটি cmac(<aes-impl>) ব্যবহার করে aes এর যেকোনো বাস্তবায়নের সাথে তৈরি করা যেতে পারে। অন্যান্য বাস্তবায়ন স্বতন্ত্র.
ecb(aes) ecb (টেমপ্লেট), ecb-aes-neon , ecb-aes-neonbs , ecb-aes-ce হ্যাঁ AES-ECB: সমস্ত AES কী মাপ সমর্থিত। ecb টেমপ্লেটটি ecb(<aes-impl>) ব্যবহার করে aes এর যেকোনো বাস্তবায়নের সাথে তৈরি করা যেতে পারে। অন্যান্য বাস্তবায়ন স্বতন্ত্র.
cbc(aes) cbc (টেমপ্লেট), cbc-aes-neon , cbc-aes-neonbs , cbc-aes-ce হ্যাঁ AES-CBC: সমস্ত AES কী মাপ সমর্থিত। cbc টেমপ্লেটটি ctr(<aes-impl>) ব্যবহার করে aes এর যেকোনো বাস্তবায়নের সাথে তৈরি করা যেতে পারে। অন্যান্য বাস্তবায়ন স্বতন্ত্র.
cts(cbc(aes)) cts (টেমপ্লেট), cts-cbc-aes-neon , cts-cbc-aes-ce হ্যাঁ সাইফারটেক্সট চুরি সহ AES-CBC-CTS বা AES-CBC: ব্যবহৃত কনভেনশন হল CS3 ; চূড়ান্ত দুটি সাইফারটেক্সট ব্লক নিঃশর্তভাবে অদলবদল করা হয়। সমস্ত AES কী মাপ সমর্থিত। cts টেমপ্লেটটি cts(<cbc(aes)-impl>) ব্যবহার করে cbc এর যেকোনো বাস্তবায়নের সাথে তৈরি করা যেতে পারে। অন্যান্য বাস্তবায়ন স্বতন্ত্র.
ctr(aes) ctr (টেমপ্লেট), ctr-aes-neon , ctr-aes-neonbs , ctr-aes-ce হ্যাঁ AES-CTR: সমস্ত AES কী মাপ সমর্থিত। ctr টেমপ্লেটটি ctr(<aes-impl>) ব্যবহার করে aes এর যেকোনো বাস্তবায়নের সাথে তৈরি করা যেতে পারে। অন্যান্য বাস্তবায়ন স্বতন্ত্র.
xts(aes) xts (টেমপ্লেট), xts-aes-neon , xts-aes-neonbs , xts-aes-ce হ্যাঁ AES-XTS: সমস্ত AES কী মাপ সমর্থিত। xts টেমপ্লেটটি xts(<ecb(aes)-impl>) ব্যবহার করে ecb(aes) এর যেকোনো বাস্তবায়নের সাথে তৈরি করা যেতে পারে। অন্যান্য বাস্তবায়ন স্বতন্ত্র. সমস্ত বাস্তবায়ন FIPS দ্বারা প্রয়োজনীয় দুর্বল কী চেক বাস্তবায়ন করে; অর্থাৎ, XTS কী যার প্রথম এবং দ্বিতীয় অর্ধেক সমান তা প্রত্যাখ্যান করা হয়।
gcm(aes) gcm (টেমপ্লেট), gcm-aes-ce নং 1 AES-GCM: সমস্ত AES কী মাপ সমর্থিত। শুধুমাত্র 96-বিট IV সমর্থিত। এই মডিউলের অন্যান্য সমস্ত AES মোডের মতো, কলার IV প্রদানের জন্য দায়ী। gcm টেমপ্লেটটি gcm_base(<ctr(aes)-impl>,<ghash-impl>) ব্যবহার করে ctr(aes) এবং ghash এর যেকোনো বাস্তবায়নের সাথে তৈরি করা যেতে পারে। অন্যান্য বাস্তবায়ন স্বতন্ত্র.
sha1 sha1-generic , sha1-ce হ্যাঁ SHA-1 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন
sha224 sha224-generic , sha224-arm64 , sha224-ce হ্যাঁ SHA-224 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন: কোডটি SHA-256 এর সাথে ভাগ করা হয়েছে৷
sha256 sha256-generic , sha256-arm64 , sha256-ce , SHA-256 লাইব্রেরি হ্যাঁ SHA-256 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন: ঐতিহ্যগত ক্রিপ্টোএপিআই ইন্টারফেস ছাড়াও SHA-256-এ একটি লাইব্রেরি ইন্টারফেস প্রদান করা হয়। এই লাইব্রেরি ইন্টারফেস একটি ভিন্ন বাস্তবায়ন ব্যবহার করে।
sha384 sha384-generic , sha384-arm64 , sha384-ce হ্যাঁ SHA-384 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন: কোডটি SHA-512 এর সাথে শেয়ার করা হয়েছে।
sha512 sha512-generic , sha512-arm64 , sha512-ce হ্যাঁ SHA-512 ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশন
hmac hmac (টেমপ্লেট) হ্যাঁ HMAC (Keyed-Hash Message Authentication Code): hmac টেমপ্লেটটি hmac(<sha-alg>) বা hmac(<sha-impl>) ব্যবহার করে যেকোনো SHA অ্যালগরিদম বা বাস্তবায়নের সাথে তৈরি করা যেতে পারে।
stdrng drbg_pr_hmac_sha1 , drbg_pr_hmac_sha256 , drbg_pr_hmac_sha384 , drbg_pr_hmac_sha512 হ্যাঁ HMAC_DRBG নামযুক্ত হ্যাশ ফাংশন সহ এবং পূর্বাভাস প্রতিরোধ সক্ষম সহ তত্ক্ষণাত্: স্বাস্থ্য পরীক্ষা অন্তর্ভুক্ত রয়েছে৷ এই ইন্টারফেসের ব্যবহারকারীরা তাদের নিজস্ব DRBG দৃষ্টান্ত পান।
stdrng drbg_nopr_hmac_sha1 , drbg_nopr_hmac_sha256 , drbg_nopr_hmac_sha384 , drbg_nopr_hmac_sha512 হ্যাঁ drbg_pr_* অ্যালগরিদমের মতো, কিন্তু পূর্বাভাস প্রতিরোধের অক্ষম। কোডটি ভবিষ্যদ্বাণী-প্রতিরোধী ভেরিয়েন্টের সাথে ভাগ করা হয়েছে। কার্নেল সংস্করণ 5.10-এ, সর্বোচ্চ অগ্রাধিকার DRBG হল drbg_nopr_hmac_sha256 । কার্নেল সংস্করণ 5.15 এবং পরবর্তীতে, এটি drbg_pr_hmac_sha512
jitterentropy_rng jitterentropy_rng না জিটার আরএনজি- এর সংস্করণ 2.2.0: এই ইন্টারফেসের ব্যবহারকারীরা তাদের নিজস্ব জিটার আরএনজি উদাহরণগুলি পান। তারা DRBGs যে দৃষ্টান্তগুলি ব্যবহার করে তা পুনরায় ব্যবহার করে না।
xcbc(aes) xcbc-aes-neon , xcbc-aes-ce না
xctr(aes) xctr-aes-neon , xctr-aes-ce না শুধুমাত্র কার্নেল সংস্করণ 5.15 এবং পরবর্তীতে উপস্থিত।
cbcmac(aes) cbcmac-aes-neon , cbcmac-aes-ce না
essiv(cbc(aes),sha256) essiv-cbc-aes-sha256-neon , essiv-cbc-aes-sha256-ce না

উৎস থেকে মডিউল তৈরি করুন

Android 14 বা তার পরবর্তী সংস্করণের জন্য ( 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 ডাইজেস্ট বিষয়বস্তু সহ একটি সম্পূর্ণ বিল্ড সম্পাদন করে।

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

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

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

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

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

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

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

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

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

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


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