এটিই প্রথম পৃষ্ঠা যা গুগলের মাধ্যমে দেখায় এবং সমস্ত বাস্তবায়নে সুরক্ষা দুর্বলতা আমাকে ক্রিঞ্জ করে তোলে তাই আমি অন্যের জন্য এনক্রিপশন সম্পর্কিত তথ্য যুক্ত করতে পোস্ট করছি কারণ এটি আসল পোস্ট থেকে 7 বছর হয়ে গেছে। আমি কম্পিউটার ইঞ্জিনিয়ারিংয়ে স্নাতকোত্তর ডিগ্রি অর্জন করেছি এবং ক্রিপ্টোগ্রাফি অধ্যয়ন এবং শিখতে অনেক সময় ব্যয় করেছি তাই ইন্টারনেটকে একটি নিরাপদ জায়গা করে নেওয়ার জন্য আমি আমার দুটি সেন্ট নিক্ষেপ করছি।
এছাড়াও, নোট করুন যে প্রদত্ত পরিস্থিতির জন্য অনেকগুলি বাস্তবায়ন সুরক্ষিত হতে পারে তবে কেন সেগুলি ব্যবহার করুন এবং সম্ভবত ঘটনাক্রমে কোনও ভুল করবেন? আপনার কাছে উপলব্ধ শক্তিশালী সরঞ্জামগুলি ব্যবহার করুন যদি না আপনার কাছে নির্দিষ্ট কারণ না থাকে। সামগ্রিকভাবে আমি একটি গ্রন্থাগার ব্যবহার এবং আপনি যদি পারেন তবে কট্টর কৌতুকপূর্ণ বিবরণ থেকে দূরে থাকার পরামর্শ দিচ্ছি।
আপডেট 4/5/18: আমি জেসিপ্ট থেকে গুগলের নতুন লাইব্রেরি টিঙ্কে প্রস্তাবিত লাইব্রেরিটি বোঝার জন্য আরও সহজ করার জন্য কিছু অংশ পুনরায় লিখেছিলাম , আমি জ্যাসিপটিকে একটি বিদ্যমান সেটআপ থেকে সম্পূর্ণ অপসারণের পরামর্শ দেব ।
ভূমিকা
আমি নীচে সুরক্ষিত প্রতিসম ক্রিপ্টোগ্রাফির বেসিকগুলি রূপরেখা করব এবং লোকেরা স্ট্যান্ডার্ড জাভা লাইব্রেরি দিয়ে নিজেরাই ক্রিপ্টো প্রয়োগ করিলে আমি অনলাইনে দেখতে পাওয়া সাধারণ ভুলগুলি চিহ্নিত করব। আপনি যদি গুগলের নতুন লাইব্রেরিতে চালিত সমস্ত বিবরণটি এড়িয়ে যেতে চান তবে আপনার প্রকল্পটিতে এই টিঙ্ক আমদানি করুন এবং আপনার সমস্ত এনক্রিপশনের জন্য এইএস-জিসিএম মোড ব্যবহার করুন এবং আপনি সুরক্ষিত থাকবেন।
এখন আপনি যদি জাভাতে কীভাবে এনক্রিপ্ট করবেন সে বিষয়ে কট্টর কৌতুকপূর্ণ বিবরণ শিখতে চাইলে :)
ব্লক সাইফার্স
প্রথমে আপনাকে প্রথমে একটি প্রতিসম কী ব্লক সাইফার বাছাই করতে হবে। ব্লক সাইফার হ'ল সিউডো-র্যান্ডমনেস তৈরি করতে ব্যবহৃত একটি কম্পিউটার ফাংশন / প্রোগ্রাম। সিউডো-এলোমেলোতা হ'ল নকল এলোমেলোতা যে কোয়ান্টাম কম্পিউটার ব্যতীত অন্য কোনও কম্পিউটারও এটির এবং বাস্তব এলোমেলোতার মধ্যে পার্থক্য বলতে সক্ষম হবে না। ব্লক সাইফার হ'ল বিল্ডিং ব্লকের টু ক্রিপ্টোগ্রাফি এবং যখন বিভিন্ন মোড বা স্কিম ব্যবহার করা হয় তখন আমরা এনক্রিপশন তৈরি করতে পারি।
এখন আজ উপলভ্য ব্লক সাইফার অ্যালগরিদম সম্পর্কিত, কখনই নিশ্চিত হন না , আমি কখনই ডিইএস ব্যবহার করি না, এমনকি আমি এমনকি 3DES ব্যবহারের আগে কখনও বলব । এমনকি একমাত্র ব্লক সাইফার যা এমনকি স্নোডেনের এনএসএ রিলিজ সম্ভব হিসাবে সিউডো-র্যান্ডমের খুব কাছাকাছি থাকার বিষয়টি যাচাই করতে সক্ষম হয়েছিল এটি হচ্ছে এএস 256 । এছাড়াও রয়েছে এএস 128; পার্থক্যটি হ'ল এএস 256 256-বিট ব্লকে কাজ করে, যখন এএস 128 128 ব্লকে কাজ করে। সব মিলিয়ে, এইএস 128 কে নিরাপদ হিসাবে বিবেচনা করা হয় যদিও কিছু দুর্বলতাগুলি সনাক্ত করা হয়েছে, তবে 256 যত শক্তিশালী হয় ততই শক্ত।
মজার ফ্যাক্ট ডিইএস এনএসএ ফিরে পেয়েছিল যখন এটি প্রাথমিকভাবে প্রতিষ্ঠিত হয়েছিল এবং আসলে কয়েক বছরের জন্য এটি একটি গোপন রেখেছিল। যদিও কিছু লোক এখনও দাবি করেন যে 3 ডি ই এস সুরক্ষিত, তবে বেশ কয়েকটি গবেষণা পত্র রয়েছে যা 3 ডি ই ডি-তে দুর্বলতা খুঁজে পেয়েছে এবং বিশ্লেষণ করেছে ।
এনক্রিপশন মোড
যখন আপনি একটি ব্লক সাইফার গ্রহণ করেন এবং একটি নির্দিষ্ট স্কিম ব্যবহার করেন তখন এনক্রিপশন তৈরি করা হয় যাতে এলোমেলোভাবে এমন কিছু তৈরির মূল কীটির সাথে মিলিত হয় যা আপনি যতক্ষণ না কীটি জানেন ততক্ষণ পুনরুদ্ধারযোগ্য। এটিকে এনক্রিপশন মোড হিসাবে উল্লেখ করা হয়।
এখানে একটি এনক্রিপশন মোড এবং ইসিবি হিসাবে সর্বাধিক সহজ মোডের উদাহরণ রয়েছে যাতে আপনি কী ঘটছে তা দৃশ্যত বুঝতে পারবেন:
আপনি অনলাইনে সাধারণত যে এনক্রিপশন মোডগুলি দেখতে পাবেন তা নিম্নলিখিত:
ইসিবি সিটিআর, সিবিসি, জিসিএম
তালিকাভুক্তের বাইরে অন্যান্য মোড রয়েছে এবং গবেষকরা সর্বদা বিদ্যমান সমস্যাগুলি উন্নত করতে নতুন মোডের দিকে কাজ করছেন।
এখন আসুন বাস্তবায়নের দিকে এগিয়ে চলুন এবং কী নিরাপদ। ইসিবি কখনও ব্যবহার করবেন না এটি বিখ্যাত লিনাক্স পেঙ্গুইনের মতো পুনরাবৃত্তি তথ্য লুকিয়ে রাখা খারাপ ।
জাভাতে প্রয়োগের সময়, নোট করুন যে আপনি নিম্নলিখিত কোডটি ব্যবহার করেন, ইসিবি মোড ডিফল্ট হিসাবে সেট করা আছে:
Cipher cipher = Cipher.getInstance("AES");
... বিপদটি এটি একটি অসামান্যতা! এবং দুর্ভাগ্যক্রমে, এটি স্ট্যাকওভারফ্লো জুড়ে এবং টিউটোরিয়াল এবং উদাহরণগুলিতে অনলাইনে দেখা যায়।
ননসেস এবং আইভি
ইসিবি মোডের সাথে পাওয়া ইস্যুটির জবাবে আইওএস হিসাবে পরিচিত এনওনস তৈরি হয়েছিল। ধারণাটি হ'ল আমরা একটি নতুন এলোমেলো ভেরিয়েবল তৈরি করি এবং এটি প্রতিটি এনক্রিপশনে সংযুক্ত করি যাতে আপনি দুটি বার্তা একই রকম এনক্রিপ্ট করার সময় সেগুলি আলাদা হয়। এর পিছনে সৌন্দর্য হ'ল চতুর্থ বা ননস হ'ল জনসাধারণের জ্ঞান। এর অর্থ একটি আক্রমণকারী এর এতে অ্যাক্সেস করতে পারে তবে যতক্ষণ না তাদের কাছে আপনার চাবি নেই, তারা সেই জ্ঞান দিয়ে কিছু করতে পারে না can
আমি যে সাধারণ সমস্যাগুলি দেখতে পাচ্ছি তা হ'ল লোকেরা তাদের কোডের একই স্থির মান হিসাবে আইভিটিকে একটি স্থির মান হিসাবে সেট করবে। এবং এখানে আইভিএসের ক্ষতির বিষয়টি সেই মুহূর্তে যখন আপনি কোনওটি পুনরাবৃত্তি করেন আপনি আসলে আপনার এনক্রিপশনের পুরো সুরক্ষাকে আপস করেন comprom
একটি এলোমেলো উত্পাদন করা হয় IV
SecureRandom randomSecureRandom = SecureRandom.getInstance("SHA1PRNG");
byte[] iv = new byte[cipher.getBlockSize()];
randomSecureRandom.nextBytes(iv);
IvParameterSpec ivParams = new IvParameterSpec(iv);
দ্রষ্টব্য: SHA1 টি নষ্ট হয়ে গেছে তবে SHA256 কীভাবে এই ব্যবহারের ক্ষেত্রে যথাযথভাবে প্রয়োগ করা যায় তা আমি খুঁজে পাইনি, সুতরাং যদি কেউ এই বিষয়ে ক্র্যাক করে আপডেট করতে চায় তবে এটি দুর্দান্ত হত! এছাড়াও SHA1 আক্রমণ এখনও প্রচলিত নয় কারণ এটি একটি বিশাল ক্লাস্টারে ক্র্যাক হতে কয়েক বছর সময় নিতে পারে। এখানে বিশদ পরীক্ষা করে দেখুন।
সিটিআর বাস্তবায়ন
সিটিআর মোডের জন্য কোনও প্যাডিংয়ের প্রয়োজন নেই।
Cipher cipher = Cipher.getInstance("AES/CTR/NoPadding");
সিবিসি বাস্তবায়ন
আপনি যদি সিবিসি মোড বাস্তবায়ন করতে চান তবে পিকেসিএস 7 পেডিংয়ের সাহায্যে এটি করুন:
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
সিবিসি এবং সিটিআর দুর্বলতা এবং আপনার জিসিএম কেন ব্যবহার করা উচিত
যদিও অন্যান্য কিছু মোড যেমন সিবিসি এবং সিটিআর নিরাপদ তারা এটিকে চালিত করে যেখানে আক্রমণকারী এনক্রিপ্ট করা ডেটা ফ্লিপ করতে পারে এবং ডিক্রিপ্ট হওয়ার পরে এর মান পরিবর্তন করে। সুতরাং আসুন আমরা বলি আপনি একটি কল্পিত ব্যাঙ্ক বার্তা "সেল 100" এনক্রিপ্ট করেছেন, আপনার এনক্রিপ্ট করা বার্তাটি এই "eu23ng" দেখে মনে হচ্ছে আক্রমণকারী কিছুটা "eu53ng" তে পরিবর্তিত হয় এবং হঠাৎ আপনার বার্তাটি ডিক্রিপ্ট করার পরে এটি "বিক্রয় 900" হিসাবে পড়ে।
এটি এড়াতে বেশিরভাগ ইন্টারনেট জিসিএম ব্যবহার করে এবং আপনি যখনই এইচটিটিপিএস দেখেন তারা সম্ভবত জিসিএম ব্যবহার করছেন। জিসিএম এনক্রিপ্ট করা বার্তাকে হ্যাশ দিয়ে স্বাক্ষর করে এবং এই স্বাক্ষরটি ব্যবহার করে বার্তাটি পরিবর্তন করা হয়নি তা যাচাই করতে পরীক্ষা করে।
আমি জিসিএম এর জটিলতার কারণে বাস্তবায়ন এড়াতে চাই। আপনি গুগলসের নতুন লাইব্রেরি টিঙ্ক ব্যবহার করা ভাল, কারণ এখানে আবার যদি আপনি ঘটনাক্রমে কোনও আইভি পুনরায় করেন তবে আপনি জিসিএমের সাথে কীটির সাথে আপস করছেন, যা চূড়ান্ত সুরক্ষার ত্রুটি। নতুন গবেষকরা আইভি পুনরাবৃত্তি প্রতিরোধী এনক্রিপশন মোডের দিকে কাজ করছেন যেখানে আপনি চতুর্থ পুনরাবৃত্তি করলেও কী বিপদজনক নয় তবে এটি এখনও মূল ধারায় আসতে পারে নি।
এখন আপনি যদি জিসিএম বাস্তবায়ন করতে চান তবে এখানে একটি দুর্দান্ত জিসিএম বাস্তবায়নের লিঙ্ক । যাইহোক, আমি সুরক্ষাটি নিশ্চিত করতে পারছি না বা এটি সঠিকভাবে প্রয়োগ করা হয়েছে তবে এটি ভিত্তিটি নীচে পেয়ে যায়। এছাড়াও জিসিএম সহ নোট করুন যে কোনও প্যাডিং নেই।
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
কী বনাম পাসওয়ার্ড
আর একটি খুব গুরুত্বপূর্ণ নোট, এটি যখন ক্রিপ্টোগ্রাফির কথা আসে তখন কী এবং পাসওয়ার্ড একই জিনিস হয় না। ক্রিপ্টোগ্রাফির একটি কী সুরক্ষিত হিসাবে বিবেচনা করার জন্য একটি নির্দিষ্ট পরিমাণ এনট্রপি এবং এলোমেলোতা থাকা দরকার। এ কারণেই আপনার জন্য কী তৈরি করার জন্য আপনাকে যথাযথ ক্রিপ্টোগ্রাফিক লাইব্রেরি ব্যবহার নিশ্চিত করতে হবে।
সুতরাং আপনার এখানে দুটি বাস্তবায়ন রয়েছে যা আপনি এখানে করতে পারেন, প্রথমটি হল র্যান্ডম কী জেনারেশনের জন্য এই স্ট্যাকওভারফ্লো থ্রেডটিতে পাওয়া কোডটি ব্যবহার করা । এই সমাধানটি আপনি ব্যবহার করতে পারেন এমন স্ক্র্যাচ থেকে একটি কী তৈরি করতে একটি সুরক্ষিত এলোমেলো নম্বর জেনারেটর ব্যবহার করে।
অন্য কম সুরক্ষিত বিকল্পটি হ'ল ব্যবহারকারীর ইনপুট যেমন পাসওয়ার্ড। যে বিষয়টি আমরা আলোচনা করেছি তা হ'ল পাসওয়ার্ডটির পর্যাপ্ত এনট্রপি নেই, সুতরাং আমাদের পিবিকেডিএফ 2 ব্যবহার করতে হবে , একটি অ্যালগরিদম যা পাসওয়ার্ড নেয় এবং এটি শক্তিশালী করে। এখানে আমি পছন্দ করেছি একটি স্ট্যাক ওভারফ্লো বাস্তবায়ন । তবে গুগল টিঙ্ক লাইব্রেরিতে এগুলি অন্তর্নির্মিত রয়েছে এবং আপনার এটির সুবিধা নেওয়া উচিত।
অ্যান্ড্রয়েড বিকাশকারীরা
এখানে উল্লেখ করার একটি গুরুত্বপূর্ণ বিষয় হ'ল আপনার অ্যান্ড্রয়েড কোডটি বিপরীত ইঞ্জিনিয়ারযোগ্য এবং বেশিরভাগ ক্ষেত্রে জাভা কোডও খুব বেশি তা জানা। এর অর্থ যদি আপনি নিজের কোডটিতে পাসওয়ার্ডটি সরল পাঠ্যে সঞ্চয় করেন। একজন হ্যাকার সহজেই এটি পুনরুদ্ধার করতে পারে। সাধারণত, এই ধরণের এনক্রিপশনের জন্য, আপনি অসীম ক্রিপ্টোগ্রাফি এবং আরও কিছু ব্যবহার করতে চান। এটি এই পোস্টের আওতার বাইরে তাই আমি এতে ডুব দেওয়া এড়াব।
2013 থেকে একটি আকর্ষণীয় পাঠ্য : পয়েন্টগুলি দেখায় যে অ্যান্ড্রয়েডে ক্রিপ্টোর 88% বাস্তবায়ন ভুলভাবে করা হয়েছিল।
সর্বশেষ ভাবনা
আবার আমি পরামর্শ দেব জাভা লাইব্রেরিটি সরাসরি ক্রিপ্টোর জন্য প্রয়োগ না করা এবং গুগল টিঙ্ক ব্যবহার করা , এটি আপনার মাথা ব্যাথা বাঁচাবে কারণ তারা সত্যই সমস্ত অ্যালগরিদমগুলি যথাযথভাবে প্রয়োগ করার জন্য একটি ভাল কাজ করেছেন। এবং তারপরেও নিশ্চিত করুন যে আপনি এখানে এবং সেখানে টিঙ্ক গিথুব, দুর্বলতা পপআপ নিয়ে আসা সমস্যাগুলি পরীক্ষা করে দেখুন।
আপনার যদি কোন প্রশ্ন বা মতামত থাকে তবে নির্দ্বিধায় মন্তব্য করুন! সুরক্ষা সর্বদা পরিবর্তিত হয় এবং এটি চালিয়ে যাওয়ার জন্য আপনার যথাসাধ্য চেষ্টা করা প্রয়োজন :)