এনক্রিপ্ট করা ক্ষেত্রগুলির সাথে একটি মাইএসকিউএল ডাটাবেস কীভাবে সন্ধান করবেন


15

ধরুন আমার কোনও মাইএসকিউএল ডাটাবেসের নির্দিষ্ট টেবিল-ক্ষেত্রগুলি এনক্রিপ্ট করা দরকার । অতিরিক্তভাবে, আমি যে ক্ষেত্রগুলি এনক্রিপ্ট করেছি সেগুলির কয়েকটি অনুসন্ধান করতে হবে।

কীভাবে কেউ এই ক্ষেত্রগুলি অনুসন্ধান করবে?

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

আপডেট 2012-09-07

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

আপডেট 2012-09-08

এনক্রিপশন হ'ল এই প্রশ্নের কর্নেল।

কিছু উত্তর দ্বারা প্রস্তাবিত অ্যাক্সেস বিধিনিষেধগুলি ইতিমধ্যে প্রযোজ্য - তবে ডেটা এনক্রিপ্ট করার আনুষ্ঠানিক প্রয়োজনীয়তার সাথে খাপ খায় না।

এই আনুষ্ঠানিক প্রয়োজন না পেমেন্ট কার্ড ইন্ডাস্ট্রি ডেটা সুরক্ষা স্ট্যান্ডার্ড [পিসিআই]।

উত্তর:


11

স্পষ্টতই এগুলি দেখার উদ্দেশ্যে নয়, তাই তাদের অনুসন্ধান করা সমস্যাযুক্ত হবে।

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

আপনার যদি প্রয়োজন হয় তবে আপনি সম্ভবত হ্যাশগুলির একটি "সম্পূর্ণ পাঠ্য" সূচক তৈরি করে এটি প্রসারিত করতে পারেন, তবে এটি সত্যিই জটিল হয়ে উঠতে পারে।

অভিযোজ্য বস্তু

পরামর্শ দেওয়া হয়েছে যে অভিধানের আক্রমণগুলির ঝুঁকির বিষয়ে আড্ডায় বেশ দীর্ঘ বিতর্ক হিসাবে আমি আমার উত্তরে একটি পাদটীকা যুক্ত করেছি, তাই উপরোক্ত পদ্ধতির এই সম্ভাব্য সুরক্ষা ঝুঁকি নিয়ে আমি আলোচনা করব।

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

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

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

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

আপনি যদি কোনও ব্যক্তির সাথে কোনও এসএসএন মেলানোর চেষ্টা করছেন তবে আপনি একটি নির্দিষ্ট এসএসএন বা ক্রেডিট কার্ড নম্বরও সন্ধান করতে পারেন । আবার, অভিধান অভিধানের আক্রমণটির বিন্দুটি নয়, তবে করা সম্ভব, তাই যদি আপনার ঝুঁকিটি এড়ানো উচিত তবে আমার উত্তরটি আপনার পক্ষে ভাল সমাধান নয়।

তাই সেখানে যদি আপনি এটি আছে। সমস্ত এনক্রিপ্ট করা ডেটা যেমন, এটি সাধারণত কোনও কারণে এনক্রিপ্ট করা হয়, তাই আপনার ডেটা এবং আপনি এটি থেকে কী সুরক্ষা দেওয়ার চেষ্টা করছেন সে সম্পর্কে সচেতন হন।


এই উত্তরের আলোচনাটি চ্যাটে সরানো হয়েছে
পল হোয়াইট 9

5

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

ক্রিপটডিবি ব্যবহার করা বিভিন্ন এনক্রিপশন পদ্ধতিগুলির মধ্যে রয়েছে:

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

  • ডিইটি , আরআরডি-র একটি বৈকল্পিক যা ডিটারমিনিস্টিক, যাতে দুটি অভিন্ন মান (একই কলামে) একই সিফারেক্সটে এনক্রিপ্ট হয়। ফর্মের সমতা প্রশ্নগুলির সমর্থন করে WHERE column = 'constant'

  • ওপিই , একটি অর্ডার-সংরক্ষণ এনক্রিপশন স্কিম যা অসমতার প্রশ্নগুলিকে সমর্থন করে WHERE column > 'constant'

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

  • অনুসন্ধান , ফর্মের কীওয়ার্ড অনুসন্ধানগুলিকে সমর্থন করে এমন একটি স্কিম WHERE column LIKE '% word %'

  • যোগদান এবং অপ-জিন , ডিইটি এবং অপের রূপগুলি যা বিভিন্ন কলামের মানগুলিকে একে অপরের সাথে তুলনা করতে দেয়। সমর্থন সমতা এবং ব্যাপ্তি যথাক্রমে যোগদান করে।

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

আপনি যদি আগ্রহী হন তবে আপনাকে ক্রিপ্টডিবি ওয়েবসাইট থেকে লিঙ্কিত কাগজপত্রগুলি বিশেষত পোপা, রেডফিল্ড, জেল্ডোভিচ এবং বালাকৃষ্ণন ( এসওএসপি ২০১১ ) দ্বারা "এনক্রিপ্টড ক্যোয়ারী প্রসেসিং সহ গোপনীয়তা রক্ষা" গোপনীয়তার পরামর্শ দেওয়া উচিত । এই কাগজপত্রগুলি বিভিন্ন সুরক্ষা এবং পারফরম্যান্সের ব্যবসায়ের বিভিন্ন বিবরণ বিভিন্ন বিশদ জিজ্ঞাসা প্রকারের সমর্থন জড়িত আরও বর্ণনা করে।


1
It works by encrypting and decrypting data as it passes between the application and the database: অবশ্যই এটি সমস্যার কারণ হতে পারে যদি অনুসন্ধান করা ডেটা ডাটাবেসে ইতিমধ্যে থাকে (এনক্রিপ্ট করা) তবে সম্ভবত ডাটাবেস অনুসন্ধান করা কোয়েরিটি কেবল তখনই ক্রিপ্টডিবিতে (এবং তারপরে এনক্রিপ্ট করা হবে)? আমি বুঝতে পারি না এই পদ্ধতিটি কীভাবে দক্ষ হতে পারে?
মার্টিন

3

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

ব্যবসায়ের কারণগুলি কী কী? আপনার কোন ডেটা এনক্রিপ্ট করতে হবে এবং কেন? আপনি যদি পিসিআই সম্মতি খুঁজছেন, আমি একটি রচনা লিখতে পারে।

আপনার প্রয়োজনীয়তা সম্পর্কে প্রশ্ন:

  • ফলস্বরূপ, আপনার কি কোনও অস্তিত্ব / ফলস্বরূপ উপস্থিত নেই বা প্রকৃত ডেটা ফেরত দিতে হবে?
  • আপনার কি '% OMG_SEKRIT%' সামর্থ্য দরকার?
  • কে দেখতে পাচ্ছে না এবং কেন?

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

ব্যবহারকারী / ভূমিকা / এপিআই দ্বারা সীমাবদ্ধ। ডিস্কে এনক্রিপ্ট করুন। আপনি যদি আরও গুরুত্বপূর্ণ ডেটা সঞ্চয় করে থাকেন তবে আমি কেন আপনি মাইএসকিউএল ব্যবহার করছেন তা জানতে আগ্রহী।


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

"আরও গুরুত্বপূর্ণ ডেটা" এর মানদণ্ড কী?
আরকানাইন

2

আমি এটি সন্ধান করছি এবং আপনার প্রশ্ন জুড়ে এসেছি। আমি অভিগমন "এনক্রিপ্ট করা ডেটা অনুসন্ধানের জন্য প্রাকটিক্যাল প্রযুক্তি" কাগজ অধ্যায় 5.4 রূপরেখা প্রতি পক্ষপাতী করছি http://www.cs.berkeley.edu/~dawnsong/papers/se.pdf

মূল সূচকটি এমন একটি সূচক তৈরি করা যা এনক্রিপ্ট হওয়া কীওয়ার্ডগুলি এনক্রিপ্ট করা অনুসন্ধান নথিতে উপস্থিত থাকে। কৌশলটি হ'ল দস্তাবেজের অবস্থানগুলি (বা ডাটাবেস) যেখানে এই কীওয়ার্ড উপস্থিত রয়েছে তা এনক্রিপ্ট করা।


1

প্রোগ্রামগতভাবে, একটি দক্ষ সমাধান হয়

  1. আপনি যে ক্ষেত্রটি রেকর্ড আইডি দিয়ে অনুসন্ধান করছেন কেবলমাত্র তার জন্য সমস্ত রেকর্ড পুনরুদ্ধার করুন
  2. একটি অস্থায়ী টেবিল মধ্যে ডিক্রিপ্ট
  3. যে টেবিলের বিরুদ্ধে অনুসন্ধান চালান
  4. অনুসন্ধান মানদণ্ডের সাথে মেলে এমন সম্পূর্ণ রেকর্ড (সমস্ত ক্ষেত্র) পুনরুদ্ধার করতে আইডি ব্যবহার করুন
  5. এগুলি ডিক্রিপ্ট করুন এবং তাদের ব্যবহারকারীর কাছে ফিরিয়ে দিন

মুল বক্তব্যটি হ'ল 1 এবং 4 টি শুরুতে সমস্ত রেকর্ডের সমস্ত ক্ষেত্র পুনরুদ্ধার এবং ডিক্রিপ্ট করার চেয়ে ডেটাগুলির উল্লেখযোগ্য পরিমাণে ছোট সেট।

আশা করি এইটি কাজ করবে.


সরলরেখায় অস্থায়ী টেবিলগুলি তুলনামূলকভাবে (অর্থাত্ খুব সহজ) সঠিক মুহুর্তে সার্ভারটি আটকানো বা পড়ার জন্য সহজভাবে temp/ফোল্ডারটি এবং ব্যাংকে অনুলিপি করতে পারে, পুরো কলামের জন্য সরলখাদির মান রয়েছে, এটি অপারেটিংয়ের নিরাপদ উপায় নয়
মার্টিন

1

এমওয়াইএসকিউএলের অভ্যন্তরীণ এনক্রিপশন ফাংশনগুলি ব্যবহার করে এটি সম্পূর্ণ অনুসন্ধান কার্যকারিতা সহ সম্ভব।

এখানে একটি উদাহরণ:

!!! আমি এখানে মাইএসকিউএল এনকোড ব্যবহার করছি () এখানে সহজ সরলতার জন্য, মাইএসকিউএল_এনকোড এখন কনসাইডারড ইনসিকিউর, অন্য একটি ইন্টারন্যাল মাইএসকিউএল ফাংশন ইনস্টলডের মধ্যে একটি ব্যবহার করুন !!!

UPDATE my_table
SET field=ENCODE('my_data', 'my_password')
WHERE ID=1;

SELECT DECODE(field, 'my_password') as field FROM my_table
WHERE field LIKE 'data';

উপরের মন্তব্যে যেমন পরামর্শ দেওয়া হয়েছে, এনকোড () ব্যবহার করবেন না, অন্য এনক্রিপশন ফাংশনগুলির মধ্যে একটি ব্যবহার করুন আমি তার উদাহরণটির মধ্যে কেবল এনকোডি ব্যবহার করছি তার সরলতার কারণে

আপনি যদি কোনও অ্যাপ্লিকেশন যেমন পিএইচপি এর মধ্যে এটি করছেন, আপনি এটি করতে পারবেন আপনার ডিবি গেটওয়ে বা সংগ্রহশালা ক্লাসের মধ্যে প্রতিটি টেবিলের এনক্রিপ্ট হওয়া কলামগুলির তালিকা / অ্যারে সম্পর্কিত গেটওয়ে শ্রেণীর মধ্যে সংরক্ষণ করে can

class UserGateway
{
    protected $encrypted_fields = array(
        'username',
        'email'
    );

    public function get($fields, ...)
    {
        foreach ($fields as $k => $field) {
            if (in_array($field, $fields)) {
                $fields[$k] = $this->decodeSelect($field);
            }
        }

        $sql = 'SELECT '.implode(',', $fields);

        //......
    }

    protected function decodeSelect($field)
    {
        return "DECODE($field, $pass) AS $field";
    }
}

অবশ্যই এটি খুব রুক্ষ এবং অনিরাপদ কোড যা উল্লেখযোগ্য উন্নতি ছাড়া উত্পাদনে ব্যবহার করা উচিত নয়। তবে সাধারণ ধারণা দেওয়ার ক্ষেত্রে এর উদ্দেশ্যটি পরিপূর্ণ করা উচিত।


-1

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

উদাহরণ স্বরূপ:

কি হত:

SELECT FieldA, FieldB 
FROM Table1 
WHERE FieldC = 'Value'

পরিবর্তে দেখতে যেমন হতে পারে:

SELECT FieldA, FieldB 
FROM Table1 
WHERE FieldC = 'hsk&%67ghhks83'

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