কেন একটি এপিআই কী এবং গোপন ব্যবহার করবেন?


93

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

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

তাহলে কেন দুটি চাবি ব্যবহার করবেন?

সম্পাদনা করুন: বা সেই API কীটি এপিআই গোপনটি অনুসন্ধান করতে ব্যবহৃত হয়?


উত্তর:


47

গোপন কী ক্রিপ্টোগ্রাফি একই কীটি এনকোড করতে এবং তারপরে একটি বার্তা ডিকোড করার জন্য নির্ভর করে। সুতরাং, যারা "গোপন" জানেন কেবল তারাই এই বার্তাটি পড়তে পারবেন।

আরএসএ সুরক্ষা 2 টি মিলে যাওয়া কীগুলির উপর ভিত্তি করে। প্রতিটি ব্যবহারকারীর জন্য একটি সর্বজনীন কী রয়েছে এবং প্রত্যেকে এটি (এটি) জানতে পারে। একটি ব্যক্তিগত কী রয়েছে যা কেবল ব্যবহারকারীরই জানা উচিত। পাবলিক কী দ্বারা এনক্রিপ্ট করা একটি বার্তা কেবলমাত্র ব্যক্তিগত কী দ্বারা ডিক্রিপ্ট করা যায় এবং ভিসার বিপরীতে।

সুতরাং, আমি যদি আপনাকে একটি বার্তা পাঠাতে চাই যা কেবল আপনিই পড়তে পারেন তবে আমি আপনার পাবলিক কীটি পেয়েছি (নেটওয়ার্ক থেকে), সেই কীটি দিয়ে বার্তাটি এনক্রিপ্ট করুন এবং আপনি একমাত্র ব্যক্তি যিনি এটি ডিক্রিপ্ট করতে পারবেন।

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

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

বা

আপনি আরও বিশদ ব্যাখ্যার জন্য এই লিঙ্কটি দেখতে পারেন।

এপিআই কী এবং গোপন কী কীভাবে কাজ করে?


9
উত্তম উত্তর, তবে আমি যখন ফেসবুক বা জিমেইল ইত্যাদির সাথে এপিআই সিক্রেটস এবং কীগুলি ব্যবহার করি তখন কোনও মুহুর্তে আমাকে কিছু এনক্রিপ্ট করতে বা হ্যাশ করতে হয় না। এই ক্ষেত্রে, এপিআই সিক্রেটস এবং কীগুলির বিন্দুটি কী?
কুইন্টন

4
উদাহরণস্বরূপ ফেসবুক ব্যবহার করে দুটি পরিস্থিতি রয়েছে যা আপনি অ্যাপ_সেট ব্যবহার করবেন। প্রথমটির জন্য হ্যাশিংয়ের দরকার নেই। এটি মূলত আপনার পুনর্নির্দেশ url হাইজ্যাক থেকে আটকাতে ব্যবহৃত হয়। কোনও ব্যবহারকারী লগইন করে এবং আপনার অ্যাপ্লিকেশন অ্যাক্সেস দেওয়ার পরে ফেসবুক সরাসরি পুনঃনির্দেশ url এ অ্যাক্সেস টোকন প্রেরণ করে তবে অ্যাক্সেস টোকেন ফেসবুক থেকে থাকলে আপনার যাচাইয়ের কোনও উপায় থাকবে না way আমি আপনার পুনর্নির্দেশ url এ আমার নিজের অ্যাক্সেস টোকন পোস্ট করতে পারি এবং আপনার এপিআই থেকে আসা ফেসবুক ক্রিয়াকলাপগুলি কার্যকর করতে পারি। পরিবর্তে ফেসবুক পুনর্নির্দেশ url এ একটি কোড প্রেরণ করে। এপিআই তারপরে প্রকৃত অ্যাক্সেস টোকেনের জন্য কোডটি বিনিময় করে।
রায়ান টমাস

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

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

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

57

আপনার দুটি পৃথক কী প্রয়োজন, একটি যা তাদেরকে বলে দেয় আপনি কে এবং অন্যটি যা আপনাকে প্রমাণ করে যে আপনি যাকে বলছেন তিনি

"কী" হ'ল আপনার ব্যবহারকারীর আইডি এবং "গোপন" হ'ল আপনার পাসওয়ার্ড। তারা কেবল "কী" এবং "গোপনীয়" শর্তাদি ব্যবহার করে কারণ তারা এভাবেই এটি প্রয়োগ করেছে।


4
এবং আপনি যদি https- তে যোগাযোগ করছেন? তখন কোনও গোপন কী দিয়ে আপনার বার্তাটি এনক্রিপ্ট করার কী দরকার?
কামুনিয়াফট

6
পয়েন্টটি সর্বদা ঝুঁকি হ্রাস করার জন্য। যদি https যোগাযোগের সাথে আপোস করা হয়, তবে আপনার অনুরোধটি পড়তে পারে এমন কোনও আক্রমণকারী নতুনকে জাল করতে সক্ষম হবেন না। যদি আপনার এপিআই বিড়ালের ছবি র‌্যাঙ্ক করতে চলেছে তবে কোনও বড় কথা নয়, এটি যদি কোনও পেমেন্ট এপিআই থাকে তবে আপনার সুরক্ষার একাধিক স্তর থাকতে পারে :)
ইয়েল

আমি মনে করি এটি দুটি পৃথক কী এর উদ্দেশ্য, কারণ একক ক্লায়েন্ট অ্যাপ্লিকেশনটির বিভিন্ন ব্যবহারকারীর বিভিন্ন গোপনীয়তা থাকতে পারে, অন্যথায় যদি তাদের সকলেরই একই গোপনীয়তা থাকে তবে একটি কী থাকা কার্যকর নয়। ঠিক?
মধু

এই API গুলি কেন এর Bearer:জন্য প্রমাণীকরণ ব্যবহার করে না? আপনার সেখানে একটি আইডি এবং পিডাব্লুডির ব্যবস্থা থাকবে।
স্টিফান হ্যাবারেল

8

সহজ উত্তর, আমি যদি এটি সঠিকভাবে বুঝতে পারি ...

আপনি যদি এনক্রিপশনের জন্য আপনার এপিআই কী ব্যবহার করেন তবে পরিষেবাটি কীভাবে তাদের সাথে যোগাযোগ করছে তা জানতে পারবে? কীভাবে তারা এই বার্তাটি ডিক্রিপ্ট করবেন?

আপনি কে তা জানানোর জন্য আপনি এপিআই কী ব্যবহার করেন, আপনি সরল পাঠ্যে এটি পাঠাচ্ছেন। সিক্রেট কী আপনি কারও কাছে প্রেরণ করেন না। আপনি কেবল এটি এনক্রিপশনের জন্য ব্যবহার করুন। তারপরে আপনি এনক্রিপ্ট করা বার্তাটি প্রেরণ করুন। এনক্রিপশনের জন্য ব্যবহৃত কীটি আপনি প্রেরণ করবেন না, এটি উদ্দেশ্যকে পরাস্ত করবে।


তুমি কর. আপনি এপিআই কী সার্ভারে প্রেরণ করুন। সুতরাং, এর অর্থ হ'ল যে আপনি সার্ভারের সাথে আপনার যোগাযোগকে বাধা দিচ্ছেন এমন কাউকে সেই মান দিচ্ছেন।
অ্যানাকাজিক

আমি দেখেছি প্রায় প্রতিটি এপিআইতে আপনি কী এবং গোপনীয়তা উভয়ই সার্ভারে প্রেরণ করেছেন। সার্ভারের সাথে সংযোগটি তাত্ত্বিকভাবে একই স্তরের সুরক্ষার সাথে এনক্রিপ্ট করা আছে। তবে আমি সার্ভার ছাড়া অন্য কাউকে কখনও দিই না।
সুডো

আমি কখনও secretসরল পাঠ্য প্রেরণ করতে দেখিনি । আপনি আমাকে একটি লিঙ্ক দিতে পারেন? আমি যা দেখেছি তা হ'ল secretকিছু ডেটা এনক্রিপ্ট করার জন্য। এবং এনক্রিপ্ট করা ডেটা সহ, প্রেরণ apiKeyযাতে সার্ভারটি কীভাবে ডেটা ডিক্রিপ্ট করতে হয় তা জানে।
অঞ্জাজিক

twilio.com/docs/sms/tutorials/… এবং nexmo.github.io/Quickstarts/sms/send আমি যে উদাহরণগুলি দেখেছি সেগুলি স্ট্যাকওভারফ্লোতে অনুসন্ধান করতে আমাকে উত্সাহিত করেছিল।
sudo

টিভিলিও এই পদগুলি হুবহু ব্যবহার করছে না। কিন্তু Nexmo নিশ্চিত এক ঝলকে পর, মনে তারা শুধু তথ্য আহ্বান করা হয় ভালো হয় ... কিন্তু, secretএবং apiKeyএবং তারা কি আসলে করছে usernameএবং password। যা সম্পূর্ণ আলাদা জিনিস ...
অঞ্জাজিক

3

গোপন এবং (সর্বজনীন) কী কী তা ব্যাখ্যা করার উত্তর রয়েছে। এটি একটি সরকারী-বেসরকারী কী জুটি যা তারা বিভ্রান্তিকর নাম দেয়। তবে কেউ বলছেন না কেন API গুলি উভয়েরই প্রয়োজন, এবং অনেকগুলি API আপনাকে কেবল একটি গোপনীয়তা দেয়! আমি কখনও কোনও এপিআই-র ডক্স ব্যাখ্যা করতে দেখিনি যে তাদের কাছে দুটি কী কী রয়েছে, তাই আমি সবচেয়ে ভাল করতে পারি অনুমান করা ...

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

তবে অনেকগুলি - আসলে এটি বেশিরভাগই মনে হয় - APIs আপনি উভয় কীগুলি অনুরোধে প্রেরণ করেছেন যেহেতু লোকেরা তাদের নিজস্ব স্বাক্ষরগুলি তৈরি করার চেয়ে সহজ; অন্যথায় খাঁটি সিআরএল উদাহরণ থাকতে পারে না! সেক্ষেত্রে এগুলি আলাদা করা অর্থহীন। আমি অনুমান করি যে পৃথক কীগুলি যদি পরে এপিআই পরিবর্তন করে তবে সেগুলির সুবিধা নিতে পারে for বা কারও কারও কাছে ক্লায়েন্ট লাইব্রেরি রয়েছে যা এটি আরও সুরক্ষিত উপায়ে করতে পারে।


2

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

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

দ্বিতীয় টুকরো তথ্য বা "গোপন" রাখার মাধ্যমে আপনি প্রথমে "কী" ব্যবহার করে ব্যবহারকারীর বা শংসাপত্রটি সন্ধান করতে পারেন যা কোনও সময় আক্রমণে ঝুঁকিপূর্ণ হতে পারে, তারপরে একটি মান নির্ধারণের জন্য সময়-সুরক্ষার তুলনা ফাংশনটি ব্যবহার করুন গোপন".

পাইথনের সেই ফাংশনটি বাস্তবায়ন করা হল:

https://github.com/python/cpython/blob/cd8295ff758891f21084a6a5ad3403d35dda38f7/odules/_operator.c#L727

এবং এটি hmacলিবে (এবং সম্ভবত অন্যরা) প্রকাশ করা হয়েছে:

https://docs.python.org/3/library/hmac.html#hmac.compare_digest


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

এরপরে এপিআই কীগুলি সংরক্ষণের সমাধানগুলি হ'ল:

  1. একটি পৃথক কী এবং গোপন ব্যবহার করুন, রেকর্ডটি সন্ধানের জন্য কীটি ব্যবহার করুন এবং গোপনীয়তাটি পরীক্ষা করতে একটি সময়-নিরাপদ তুলনা ব্যবহার করুন। এটি আপনাকে ব্যবহারকারীকে আবার কোনও ব্যবহারকারীর কাছে কী এবং গোপনীয়তা দেখাতে দেয়।
  2. একটি পৃথক কী এবং গোপন ব্যবহার করুন, গোপনে প্রতিসাম্য, ডিস্ট্রিমেন্টিক এনক্রিপশন ব্যবহার করুন এবং এনক্রিপ্ট করা গোপনগুলির একটি সাধারণ তুলনা করুন। এটি আপনাকে ব্যবহারকারীকে আবার কী এবং গোপনীয়তা দেখাতে দেয় এবং সময়-নিরাপদ তুলনা কার্যকর করতে বাঁচাতে পারে।
  3. একটি পৃথক কী এবং গোপন ব্যবহার করুন, গোপনটি প্রদর্শন করুন, হ্যাশ করুন এবং এটি সংরক্ষণ করুন, তারপরে হ্যাশ গোপনের একটি সাধারণ তুলনা করুন। এটি দ্বি-মুখী এনক্রিপশন ব্যবহার করার প্রয়োজনীয়তা সরিয়ে দেয় এবং সিস্টেমটি আপস করা থাকলে আপনার গোপন সুরক্ষিত করার অতিরিক্ত সুবিধা রয়েছে। এর খারাপ দিক রয়েছে যা আপনি আবার ব্যবহারকারীর কাছে গোপনীয়তা দেখাতে পারবেন না।
  4. একটি একক কী ব্যবহার করুন , এটি একবার ব্যবহারকারীর কাছে প্রদর্শন করুন, এটি হ্যাশ করুন, তারপরে হ্যাশড বা এনক্রিপ্ট করা কীটির সাধারণ অনুসন্ধান করুন। এটি একটি একক কী ব্যবহার করে তবে এটি ব্যবহারকারীর কাছে আবার দেখাতে সক্ষম নয়। সিস্টেমটি আপস করা থাকলে কীগুলি সুরক্ষিত রাখার সুবিধা রয়েছে।
  5. একটি সিঙ্গল কী ব্যবহার করুন , এটি একবার ব্যবহারকারীর কাছে দেখান, এটিকে এনক্রিপ্ট করুন এবং এনক্রিপ্ট করা গোপনের একটি সাধারণ অনুসন্ধান করুন। ব্যবহারকারীর কাছে আবার প্রদর্শিত হতে পারে, তবে কীগুলি অরক্ষিত হওয়াতে যদি তারা সিস্টেম আপস করে থাকে।

এর মধ্যে আমি মনে করি যে 3 সুরক্ষা এবং সুবিধার সর্বোত্তম ভারসাম্য। কীগুলি জারি করার সময় আমি বহু ওয়েবসাইটে এটি প্রয়োগ করা দেখেছি।

এছাড়াও, আমি এই উত্তরটির সমালোচনা করার জন্য যে কোনও প্রকৃত সুরক্ষা বিশেষজ্ঞকে আমন্ত্রণ জানাই। আমি এটি অন্য আলোচনার পয়েন্ট হিসাবে এখানে পেতে চেয়েছিলেন।

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