এই পৃষ্ঠাটি KeyMint হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) বাস্তবায়নকারীদের সহায়তা করার জন্য অতিরিক্ত বিবরণ এবং নির্দেশিকা প্রদান করে। এইচএএল-এর প্রাথমিক ডকুমেন্টেশন হল এআইডিএল ইন্টারফেস স্পেসিফিকেশন ।
API অপব্যবহার
কলাররা অনুমোদনের সাথে কীমিন্ট কীগুলি তৈরি করতে পারে যা API প্যারামিটার হিসাবে বৈধ, তবে এটি ফলাফল কীগুলিকে অনিরাপদ বা অব্যবহারযোগ্য করে তোলে। এই ধরনের ক্ষেত্রে ব্যর্থ হওয়ার জন্য বা ডায়াগনস্টিক ইস্যু করার জন্য KeyMint বাস্তবায়নের প্রয়োজন নেই। খুব ছোট কীগুলির ব্যবহার, অপ্রাসঙ্গিক ইনপুট প্যারামিটারের স্পেসিফিকেশন, IV বা ননসেসের পুনঃব্যবহার, কোন উদ্দেশ্য ছাড়াই কী তৈরি করা (অতএব অকেজো), এবং এই জাতীয়গুলি বাস্তবায়ন দ্বারা নির্ণয় করা উচিত নয়।
KeyMint মডিউলে কলগুলি বুদ্ধিমান এবং দরকারী তা নিশ্চিত করার দায়িত্ব অ্যাপস, ফ্রেমওয়ার্ক এবং অ্যান্ড্রয়েড কীস্টোরের।
addRngEntropy এন্ট্রি পয়েন্ট
addRngEntropy
এন্ট্রি পয়েন্টটি কী এবং IV-এর জন্য র্যান্ডম সংখ্যা তৈরি করার জন্য KeyMint বাস্তবায়ন দ্বারা ব্যবহৃত পুলটিতে কলার-প্রদত্ত এনট্রপি যোগ করে।
KeyMint বাস্তবায়নের জন্য তাদের পুলে প্রদত্ত এনট্রপি সুরক্ষিতভাবে মিশ্রিত করতে হবে, যাতে একটি হার্ডওয়্যার র্যান্ডম নম্বর জেনারেটর থেকে অভ্যন্তরীণভাবে তৈরি এনট্রপিও থাকতে হবে। মিক্সিং পরিচালনা করা উচিত যাতে একজন আক্রমণকারী যার হয় addRngEntropy
প্রদত্ত বিট বা হার্ডওয়্যার-জেনারেটেড বিটগুলির সম্পূর্ণ নিয়ন্ত্রণ রয়েছে (কিন্তু উভয়ই নয়) এনট্রপি পুল থেকে উৎপন্ন বিটগুলির পূর্বাভাস দেওয়ার ক্ষেত্রে একটি উল্লেখযোগ্য সুবিধা নেই৷
মূল বৈশিষ্ট্য
প্রতিটি প্রক্রিয়া ( generateKey
, importKey
, এবং importWrappedKey
) যেগুলি KeyMint কীগুলি তৈরি করে তা নতুন তৈরি কী-এর বৈশিষ্ট্যগুলিকে ফেরত দেয়, প্রতিটি বৈশিষ্ট্যকে প্রয়োগ করে এমন নিরাপত্তা স্তরগুলিতে যথাযথভাবে বিভক্ত। Tag::APPLICATION_ID
এবং Tag::APPLICATION_DATA
ব্যতীত, কী তৈরির জন্য নির্দিষ্ট করা সমস্ত পরামিতিগুলি ফেরত দেওয়া বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে। যদি এই ট্যাগগুলি মূল পরামিতিগুলির মধ্যে অন্তর্ভুক্ত করা হয়, তবে সেগুলি প্রত্যাবর্তিত বৈশিষ্ট্যগুলি থেকে সরানো হয় যাতে প্রত্যাবর্তিত কীব্লব পরীক্ষা করে তাদের মানগুলি খুঁজে পাওয়া সম্ভব না হয়৷ যাইহোক, তারা ক্রিপ্টোগ্রাফিকভাবে কীব্লবের সাথে আবদ্ধ থাকে, যাতে কী ব্যবহার করার সময় সঠিক মান প্রদান না করা হয়, ব্যবহার ব্যর্থ হয়। একইভাবে, Tag::ROOT_OF_TRUST
কী ক্রিপ্টোগ্রাফিকভাবে আবদ্ধ, কিন্তু কী তৈরি বা আমদানির সময় এটি নির্দিষ্ট করা যায় না এবং ফেরত দেওয়া হয় না।
প্রদত্ত ট্যাগগুলি ছাড়াও, KeyMint বাস্তবায়ন Tag::ORIGIN
যোগ করে, যে পদ্ধতিতে কী তৈরি করা হয়েছিল তা নির্দেশ করে ( KeyOrigin::GENERATED
, KeyOrigin::IMPORTED
, বা KeyOrigin::SECURELY_IMPORTED
)।
রোলব্যাক প্রতিরোধ
রোলব্যাক রেজিস্ট্যান্স Tag::ROLLBACK_RESISTANCE
দ্বারা নির্দেশিত হয়, এবং এর মানে হল যে একবার deleteKey
বা deleteAllKeys
দিয়ে একটি কী মুছে ফেলা হলে, সুরক্ষিত হার্ডওয়্যার নিশ্চিত করে যে এটি আর কখনও ব্যবহারযোগ্য হবে না।
KeyMint বাস্তবায়নগুলি একটি কীব্লব, একটি এনক্রিপ্ট করা এবং প্রমাণীকৃত ফর্ম হিসাবে কলারের কাছে জেনারেট করা বা আমদানি করা কী উপাদান ফেরত দেয়। যখন কীস্টোর কীব্লবটি মুছে ফেলে, তখন কীটি চলে যায়, কিন্তু একজন আক্রমণকারী যে পূর্বে মূল উপাদানটি পুনরুদ্ধার করতে পেরেছিল সে সম্ভাব্যভাবে এটিকে ডিভাইসে পুনরুদ্ধার করতে পারে।
একটি কী রোলব্যাক প্রতিরোধী হয় যদি সুরক্ষিত হার্ডওয়্যার নিশ্চিত করে যে মুছে ফেলা কীগুলি পরে পুনরুদ্ধার করা যাবে না। এটি সাধারণত একটি বিশ্বস্ত অবস্থানে অতিরিক্ত কী মেটাডেটা সংরক্ষণ করে করা হয় যা আক্রমণকারী দ্বারা ম্যানিপুলেট করা যায় না। মোবাইল ডিভাইসে, এর জন্য ব্যবহৃত প্রক্রিয়াটি সাধারণত রিপ্লে সুরক্ষিত মেমরি ব্লক (RPMB)। যেহেতু তৈরি করা যেতে পারে এমন কীগুলির সংখ্যা মূলত সীমাহীন এবং রোলব্যাক প্রতিরোধের জন্য ব্যবহৃত বিশ্বস্ত স্টোরেজ আকারে সীমিত হতে পারে, সঞ্চয়স্থান পূর্ণ হয়ে গেলে বাস্তবায়ন রোলব্যাক-প্রতিরোধী কী তৈরি করার অনুরোধগুলি ব্যর্থ করতে পারে।
শুরু
begin()
এন্ট্রি পয়েন্ট নির্দিষ্ট কী ব্যবহার করে একটি ক্রিপ্টোগ্রাফিক অপারেশন শুরু করে, নির্দিষ্ট উদ্দেশ্যে, নির্দিষ্ট প্যারামিটারের সাথে (যথাযথ হিসাবে)। এটি একটি নতুন IKeyMintOperation
Binder অবজেক্ট প্রদান করে যা অপারেশন সম্পূর্ণ করতে ব্যবহৃত হয়। উপরন্তু, একটি চ্যালেঞ্জ মান ফেরত দেওয়া হয় যা প্রমাণীকরণ টোকেনের অংশ হিসাবে প্রমাণীকৃত অপারেশনগুলিতে ব্যবহৃত হয়।
একটি KeyMint বাস্তবায়ন কমপক্ষে 16টি সমসাময়িক ক্রিয়াকলাপ সমর্থন করে। কীস্টোর 15 পর্যন্ত ব্যবহার করে, একটি পাসওয়ার্ড এনক্রিপশনের জন্য ব্যবহার করার জন্য vold
জন্য রেখে দেয়। যখন কীস্টোরে 15টি অপারেশন চলছে ( begin()
কল করা হয়েছে, কিন্তু finish
বা abort
বলা হয়নি) এবং এটি একটি 16 তম শুরু করার জন্য একটি অনুরোধ পায়, তখন এটি নতুন অনুরোধ করা অপারেশন শুরু করার জন্য begin()
কল করার আগে সক্রিয় ক্রিয়াকলাপের সংখ্যা 14-এ কমিয়ে আনতে সর্বনিম্ন-সম্প্রতি ব্যবহৃত অপারেশনে abort()
কল করে।
যদি Tag::APPLICATION_ID
বা Tag::APPLICATION_DATA
কী জেনারেশন বা ইম্পোর্ট করার সময় নির্দিষ্ট করা হয়, তাহলে কল টু begin()
এই পদ্ধতিতে params
আর্গুমেন্টে মূলভাবে নির্দিষ্ট করা মান সহ সেই ট্যাগগুলিকে অবশ্যই অন্তর্ভুক্ত করতে হবে।
ত্রুটি হ্যান্ডলিং
যদি IKeyMintOperation
এর একটি পদ্ধতি ErrorCode::OK
ব্যতীত অন্য একটি ত্রুটি কোড প্রদান করে, অপারেশনটি বাতিল করা হয় এবং অপারেশন বাইন্ডার অবজেক্টটি অবৈধ হয়ে যায়। অবজেক্টের যেকোনো ভবিষ্যত ব্যবহার ErrorCode::INVALID_OPERATION_HANDLE
প্রদান করে।
অনুমোদন প্রয়োগ
মূল অনুমোদন প্রয়োগ প্রাথমিকভাবে begin()
এ সম্পাদিত হয়। একটি ব্যতিক্রম হল সেই ক্ষেত্রে যেখানে কীটির এক বা একাধিক Tag::USER_SECURE_ID
মান রয়েছে এবং একটি Tag::AUTH_TIMEOUT
মান নেই৷
এই ক্ষেত্রে, কীটির জন্য অপারেশন প্রতি একটি অনুমোদনের প্রয়োজন, এবং update()
বা finish()
পদ্ধতিগুলি authToken
আর্গুমেন্টে একটি auth টোকেন পায়। টোকেনটি বৈধ কিনা তা নিশ্চিত করতে, KeyMint বাস্তবায়ন:
- প্রমাণীকরণ টোকেনে HMAC স্বাক্ষর যাচাই করে।
- চেক করে যে টোকেনে একটি সুরক্ষিত ইউজার আইডি আছে যা কী এর সাথে সম্পর্কিত।
- চেক করে যে টোকেনের প্রমাণের ধরন কী এর
Tag::USER_AUTH_TYPE
সাথে মেলে। - চেক করে যে টোকেনে চ্যালেঞ্জ ক্ষেত্রে বর্তমান অপারেশনের চ্যালেঞ্জ মান রয়েছে।
এই শর্তগুলি পূরণ না হলে, KeyMint ErrorCode::KEY_USER_NOT_AUTHENTICATED
প্রদান করে।
কলার update()
এবং finish()
করতে প্রতিটি কলে প্রমাণীকরণ টোকেন প্রদান করে। বাস্তবায়ন শুধুমাত্র একবার টোকেন যাচাই করতে পারে.