কীচেন আইটেমটি অনন্য করে তোলে (আইওএসে)?


104

আমার প্রশ্নটি আইওএসে আইফোন (আইফোন, আইপ্যাড, ...) সম্পর্কিত রয়েছে cha আমি মনে করি (তবে নিশ্চিত না) ম্যাক ওএস এক্স এর অধীনে কীচেনগুলি প্রয়োগ করা একই উত্তর দিয়ে একই প্রশ্ন উত্থাপন করে।


আইওএস পাঁচ ধরণের (ক্লাস) কীচেন আইটেম সরবরাহ করে। কীটি kSecClassটাইপ নির্ধারণ করতে আপনাকে অবশ্যই এই পাঁচটি মানের একটি বেছে নিতে হবে:

kSecClassGenericPassword  used to store a generic password
kSecClassInternetPassword used to store an internet password
kSecClassCertificate      used to store a certificate
kSecClassKey              used to store a kryptographic key
kSecClassIdentity         used to store an identity (certificate + private key)

পড়া আপেল ডকুমেন্টেশন, ব্লগ এবং ফোরাম-এন্ট্রির অনেকদিন পর আমি বুঝতে পারলাম যে ধরনের Keychain আইটেমটি kSecClassGenericPasswordবৈশিষ্ট্যাবলী থেকে তার স্বতন্ত্রতা পায় kSecAttrAccessGroup, kSecAttrAccountএবং kSecAttrService

অনুরোধ 1 এ এই তিনটি বৈশিষ্ট্যটি যদি অনুরোধ 2 এর অনুরূপ হয় তবে আপনি অন্য কোনও বৈশিষ্ট্য নির্বিশেষে একই জেনেরিক পাসওয়ার্ড কীচেইন আইটেমটি পান। যদি এই বৈশিষ্ট্যের একটি (বা দুটি বা সমস্ত) এর মান পরিবর্তন করে তবে আপনি বিভিন্ন আইটেম পাবেন।

তবে kSecAttrServiceকেবল ধরণের আইটেমের জন্যই উপলভ্য kSecClassGenericPassword, তাই এটি অন্য কোনও ধরণের আইটেমের "অনন্য কী" এর অংশ হতে পারে না এবং এমন কোনও ডকুমেন্টেশন নেই যা স্পষ্টভাবে উল্লেখ করে যে কোন বৈশিষ্ট্যটি কীচেন আইটেমটি স্বতন্ত্রভাবে নির্ধারণ করে।

"জেনেরিক্যচেইন" এর "কীচেইনআইটেমব্রেপার" শ্রেণিতে থাকা নমুনা কোডটি kSecAttrGenericকোনও আইটেমটি অনন্য করতে বৈশিষ্ট্যটি ব্যবহার করে , তবে এটি একটি বাগ। এই উদাহরণে দুটি এন্ট্রি কেবল দুটি স্বতন্ত্র এন্ট্রি হিসাবে সংরক্ষণ করা হয়, কারণ তাদের kSecAttrAccessGroupআলাদা (একটিতে অ্যাক্সেস গ্রুপ সেট রয়েছে, অন্যটি এটি বিনামূল্যে দেয়)। আপনি যদি অ্যাপলের ব্যবহার করে অ্যাক্সেস গোষ্ঠী ছাড়াই ২ য় পাসওয়ার্ড যুক্ত করার চেষ্টা করেন তবে KeychainItemWrapperআপনি ব্যর্থ হবেন।

সুতরাং, দয়া করে, আমার প্রশ্নের উত্তর দিন:

  • এটা কি সত্যি যে সমন্বয় kSecAttrAccessGroup, kSecAttrAccountএবং kSecAttrServiceএকটি Keychain আইটেমটি যার kSecClass হয় "অনন্য কী" হয় kSecClassGenericPassword?
  • কীচেন আইটেমটি kSecClassনা থাকলে কোন বৈশিষ্ট্যগুলি অনন্য করে তোলে kSecClassGenericPassword?

1
এই সম্পর্কে এখানে একটি ব্লগ এন্ট্রি আছে
bobobobo

উত্তর:


179

প্রাথমিক কীগুলি নিম্নরূপ (অ্যাপল থেকে মুক্ত উত্স ফাইলগুলি থেকে প্রাপ্ত , স্কিমা.এম 4 , কীস্কেমি.এম 4 এবং সেকটিমেট.সিপি দেখুন ):

  • বর্গ একটি Keychain আইটেমের জন্য kSecClassGenericPassword, প্রাথমিক কী-এর সংমিশ্রণ kSecAttrAccountএবং kSecAttrService
  • বর্গ একটি Keychain আইটেমের জন্য kSecClassInternetPassword, প্রাথমিক কী-এর সমন্বয় kSecAttrAccount, kSecAttrSecurityDomain, kSecAttrServer, kSecAttrProtocol, kSecAttrAuthenticationType, kSecAttrPortএবং kSecAttrPath
  • বর্গ একটি Keychain আইটেমের জন্য kSecClassCertificate, প্রাথমিক কী-এর সমন্বয় kSecAttrCertificateType, kSecAttrIssuerএবং kSecAttrSerialNumber
  • বর্গ একটি Keychain আইটেমের জন্য kSecClassKey, প্রাথমিক কী-এর সমন্বয় kSecAttrApplicationLabel, kSecAttrApplicationTag, kSecAttrKeyType, kSecAttrKeySizeInBits, kSecAttrEffectiveKeySize, এবং নির্মাণকারী, শুরু হয় যা এখনো SecItem দ্বারা প্রকাশ করা হয় না তারিখ এবং শেষ তারিখ।
  • ক্লাসের একটি কীচেইন আইটেমের জন্য kSecClassIdentityআমি ওপেন সোর্স ফাইলগুলিতে প্রাথমিক কী ক্ষেত্রগুলির তথ্য পাইনি, তবে পরিচয়টি একটি ব্যক্তিগত কী এবং শংসাপত্রের সংমিশ্রণ হিসাবে, আমি ধরে নিই যে প্রাথমিক কীটি প্রাথমিক কীটির সংমিশ্রণ জন্য ক্ষেত্র kSecClassKeyএবং kSecClassCertificate

যেহেতু প্রতিটি কীচেন আইটেমটি একটি কীচেইন অ্যাক্সেস গোষ্ঠীর অন্তর্ভুক্ত তাই এটি মনে হয় কীচেন অ্যাক্সেস গ্রুপ (ক্ষেত্র kSecAttrAccessGroup) এই সমস্ত প্রাথমিক কীগুলিতে একটি যুক্ত ক্ষেত্র।


সত্যিই ভাল উত্তর মত শোনাচ্ছে! ধন্যবাদ! আমি এটি যাচাই করব এবং অন্যান্য ব্যবহারকারীর অতিরিক্ত মন্তব্যের জন্য আমি এক বা দুই দিন অপেক্ষা করতে চাই, তবে আপনি অনুগ্রহ থেকে +50 পয়েন্টের জন্য উত্তপ্ত প্রার্থী।
হুবার্ট শ্যালনাস্ট

3
দুর্দান্ত উত্তর! আমি শংসাপত্র এবং ব্যক্তিগত কীগুলির জন্য জেনেরিক কেচেইন মোড়ক কার্যকর করার জন্য কিছু দিন ধরে কাজ করছি। এটি অ্যাপলের নমুনা কোডের থেকে অনেক আলাদা যা কেবল স্ট্রিং শংসাপত্রগুলি (ব্যবহারকারীর নাম / পাসওয়ার্ড) সঞ্চয় করে। যাইহোক, আমি খুঁজে পাওয়া যায় নি যে আপনি যখন সেট করেছেন kSecClassকরতে kSecClassCertificateবা kSecClassKeyযদি এন্ট্রি (এছাড়াও কীচেইনে চেক value) ইতিমধ্যে সংরক্ষিত হয়। এটি একই শংসাপত্র বা কী দু'বার যুক্ত করা থেকে বাধা দেয়। এছাড়াও যদি আপনি kSecAttrApplicationTagকোনও কীটির জন্য আলাদা নির্দিষ্ট করে থাকেন (যা অবশ্যই উপরের পোস্টটি সম্পর্কিত অনন্য হতে পারে) এটি ব্যর্থ হবে।
ক্রিস

1
এটি টেবিলের নামkSecClass হিসাবে বিশিষ্টতা এবং উপরের নির্দিষ্ট মানগুলিকে কেবলমাত্র সংশ্লিষ্ট টেবিলের মতো ভাবতে সহায়তা করতে পারে । primary key
বোবোবো

2
শব্দার্থক শব্দ কি kSecAttrAccountএবং kSecAttrService? - বা প্রোগ্রামার তার সিদ্ধান্ত গ্রহণকারী কোনও শব্দার্থক চয়ন করতে পারে?
wcochran

1
kSecAttrServiceপরিষেবাটি সঞ্চয় করার kSecAttrAccountজন্য, অ্যাকাউন্টের নাম সংরক্ষণ করার জন্য। আপনি এগুলিতে বিভিন্ন জিনিস রাখতে পারেন তবে তা বিভ্রান্তিকর হতে পারে।
তম্মো ফ্রিজ

9

আমি অন্য দিন একটি বাগ মারছিলাম (আইওএস 7.1 এ) যা এই প্রশ্নের সাথে সম্পর্কিত। আমি SecItemCopyMatchingএকটি kSecClassGenericPasswordআইটেম পড়তে ব্যবহার করছিলাম এবং এটি errSecItemNotFound(-25300) ফিরে আসতে থাকল kSecAttrAccessGroup, kSecAttrAccountএবং সমস্তই কীচেইনের আইটেমটির সাথে মিলছিল kSecAttrService

অবশেষে আমি বুঝতে পারলাম যে kSecAttrAccessibleএটি মেলে না। কীচেইনের মান pdmn = dk ( kSecAttrAccessibleAlways) ধরেছিল তবে আমি ব্যবহার করছিলাম kSecAttrAccessibleWhenUnlocked

অবশ্যই এই মানটির জন্য প্রথম স্থানে প্রয়োজন হয় না SecItemCopyMatchingতবে এটি OSStatusছিল না errSecParamবা errSecBadReqকেবল নয় errSecItemNotFound(-25300) যা এটি খুঁজে পেতে কিছুটা জটিল করে তুলেছিল।

জন্য SecItemUpdateআমি একই সমস্যা অভিজ্ঞতা আছে কিন্তু এই পদ্ধতি এমনকি ব্যবহার করে একই kSecAttrAccessibleসালে queryপ্যারামিটার কাজ করে নি। কেবলমাত্র এই বৈশিষ্ট্যটি সম্পূর্ণরূপে অপসারণ এটি স্থির করে।

আমি আশা করি এই মন্তব্যটি আপনার কারও জন্য কয়েকটি মূল্যবান ডিবাগিং মুহুর্তগুলি সংরক্ষণ করবে।


4

@ ট্যাম্মো ফ্রিজের দেওয়া উত্তর সঠিক বলে মনে হচ্ছে (তবে সমস্ত প্রাথমিক কীগুলি উল্লেখ করা হয়নি)। আমি নথিতে কিছু প্রমাণ খুঁজছিলাম for অবশেষে পাওয়া:

অ্যাপল ডকুমেন্টেশন গোপন প্রতিটি শ্রেণীর জন্য প্রাথমিক কী উল্লেখ করে (নীচে উদ্ধৃতি):

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

  • জেনেরিক পাসওয়ার্ডগুলির জন্য, প্রাথমিক কীগুলিতে kSecAttrAccount এবং kSecAttrService অন্তর্ভুক্ত রয়েছে।
  • ইন্টারনেট পাসওয়ার্ডগুলির জন্য, প্রাথমিক কীগুলিতে কেসেকট্রা অ্যাকাউন্টসেট, কেসেকটারসিকিউরিটিডোমাইন, কেস্যাক্ট্রস সার্ভার, কেসেকটারপ্রোটোকল, কেসেকটার অ্যাটেনটিকেশনটাইপ, কেসেকআটারপোর্ট এবং ক্যাসেকআটারপথ অন্তর্ভুক্ত রয়েছে।
  • শংসাপত্রগুলির জন্য, প্রাথমিক কীগুলির মধ্যে রয়েছে কেএসএইচটিআরসিটিটিফিট টাইপ, কেসেকট্রিআইসুয়ার, এবং কেসেকটারশ্রিয়ানম্বর।
  • মূল আইটেমগুলির জন্য, প্রাথমিক কীগুলিতে কেসেকটারকিকি ক্লাস, কেসেকটারকিকি টাইপ, কেসেকট্রি অ্যাপ্লিকেশন ল্যাবেল, কেসেকট্রি অ্যাপ্লিকেশনটিগ, কেসেকটারকিকিসাইজাইনবিটস এবং কেসেকটআটারকিফেকিকিজি সাইজ অন্তর্ভুক্ত রয়েছে।
  • পরিচয় আইটেমগুলির জন্য, যা একটি শংসাপত্র এবং একটি ব্যক্তিগত কী এক সাথে বান্ডিল করা হয়, প্রাথমিক কীগুলি শংসাপত্রের মতো same একটি ব্যক্তিগত কী একাধিকবার শংসাপত্রিত হতে পারে বলে শংসাপত্রের স্বতন্ত্রতা পরিচয়টি নির্ধারণ করে।

যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত উত্তর পরিবর্তিত হলে লিঙ্কযুক্ত উত্তরগুলি অবৈধ হতে পারে। - পর্যালোচনা থেকে
pwc

সম্মত হয়েছে, যদিও এই ক্ষেত্রে এর অর্থ পুরো লিঙ্কটি অনুলিপি করা।
জুলিয়ান ক্রোল

0

কীচেন আইটেমটির স্বাতন্ত্র্যতা সম্পর্কে দরকারী তথ্যের আরও একটি অংশ এখানে দেওয়া হয়েছে, যা এই অ্যাপল ডক্স পৃষ্ঠার "অনুসন্ধানের নিশ্চয়তা নিশ্চিত করুন" বিভাগে পাওয়া যায় ।

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

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

অন্যান্য ক্ষেত্রে, আরও গুণাবলী যুক্ত করে আইটেমটির আরও বৈশিষ্ট্য বোধ করা বোধগম্য হতে পারে। উদাহরণস্বরূপ, আপনি kSecAttrLabelমূল যুক্ত ক্যোয়ারিতে বৈশিষ্ট্যটি অন্তর্ভুক্ত করতে পারেন , একটি স্ট্রিং সরবরাহ করে যা নির্দিষ্ট উদ্দেশ্যে আইটেমটিকে চিহ্নিত করে। তারপরে আপনি নিজের অনুসন্ধানটি পরে সংকীর্ণ করতে এই বৈশিষ্ট্যটি ব্যবহার করতে সক্ষম হবেন।

শ্রেণীর আইটেম kSecClassInternetPasswordউদাহরণে ব্যবহৃত হয়েছিল, তবে একটি নোট রয়েছে যা বলে:

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.