Ssh কী ব্যবহার করে কোনও ফাইল সাইন করা সম্ভব?


36

সুনির্দিষ্ট হওয়ার জন্য আমি এসএসএইচ (লিনাক্সে ওপেনএসএসএচ 5.5 পি 1) ব্যবহার করি। আমার একটি চাবি আছে, যার উপরে আমার একটি পাসফ্রেজ রয়েছে। আমি কম্পিউটারের স্টাফগুলিতে লগ ইন করার জন্য এটি ব্যবহার করি।

আমি কি ফাইল সাইন করতে এটি ব্যবহার করতে পারি?

আমি এটি বুঝতে পারি যে একটি এসএসএইচ কীটি একটি আরএসএ (বা ডিএসএ) কী এবং এসএসএইচ লগইন প্রক্রিয়া চলাকালীন এটি সার্ভারে প্রেরিত বার্তাগুলিতে স্বাক্ষর করতে ব্যবহৃত হয়। সুতরাং নীতিগতভাবে এবং অনুশীলনে, এটি জিনিসগুলিতে সাইন ইন করতে ব্যবহার করা যেতে পারে - আসলে এটিই এর একমাত্র উদ্দেশ্য।

তবে আমি যতদূর দেখতে পাচ্ছি, একটি স্বেচ্ছাসেবক ফাইল সাইন করার জন্য কীটি ব্যবহার করার কোনও উপায় নেই (যেমন আপনি পিজিপির সাথে থাকবেন, বলুন)। এই কাজ করতে কিছু উপায় আছে কি?


ওপেনএসএইচ এডি 25519 ডেটা প্রোটোকল হিসাবে ব্যবহার করে না ? সরঞ্জামগুলির বিষয় হিসাবে মনে হচ্ছে।
পাবলো এ

উত্তর:


24

ওপেনএসএসএইচ সরঞ্জামগুলির সাহায্যে এটি করার কোনও উপায় নেই।

তবে ওপেনএসএসএল সরঞ্জামগুলির সাহায্যে এটি বেশ সহজেই করা যায়। আসলে এটি করার জন্য কমপক্ষে দুটি উপায় রয়েছে। নীচের উদাহরণগুলিতে, ~/.ssh/id_rsaআপনার ব্যক্তিগত কী।

একটি উপায় ডিজিএসটি ব্যবহার করছে :

openssl dgst -sign ~/.ssh/id_rsa some-file

অন্যটি পিকেটল ব্যবহার করছে :

openssl pkeyutl -sign -inkey ~/.ssh/id_rsa -in some-file

এই উভয়ই স্ট্যান্ডার্ড আউটপুটে বাইনারি স্বাক্ষর লেখেন। ডিজিএসটি গ্রহণ করে একটি -hexবিকল্প স্বাক্ষরটির ফর্ম সম্পর্কে কিছু বিবরণ সহ একটি পাঠ্য উপস্থাপনা মুদ্রণ করবে। pkeyutl একটি -hexdumpবিকল্প নেয় যা কিছুটা কম দরকারী। উভয়ই আরএসএ এবং ডিএসএ উভয় কী গ্রহণ করবে। আউটপুটটির ফর্ম্যাটটি কী তা আমার কোনও ধারণা নেই। দুটি কমান্ড বিভিন্ন ফর্ম্যাট উত্পাদন করে। আমি এই ধারণাটি পেয়েছি যে ডিজিএসটির চেয়ে পিকেটলকে আরও আধুনিক হিসাবে বিবেচনা করা হয় ।

এই স্বাক্ষরগুলি যাচাই করতে:

openssl dgst -verify $PUBLIC_KEY_FILE -signature signature-file some-file

এবং:

openssl pkeyutl -verify -inkey $PUBLIC_KEY_FILE -sigfile signature-file -in some-file

এখানে সমস্যা $PUBLIC_KEY_FILE। ওপেনএসএসএল ওপেনএসএইচ এর সর্বজনীন কী ফর্ম্যাটটি পড়তে পারে না, সুতরাং আপনি কেবল ব্যবহার করতে পারবেন না id_rsa.pub। আপনার কাছে কয়েকটি বিকল্প রয়েছে, আদর্শ নয়।

আপনার যদি 5.6 বা তার পরে ওপেনএসএসএইচ সংস্করণ থাকে তবে আপনি সম্ভবত এটি করতে পারেন:

ssh-keygen -e -f ~/.ssh/id_rsa.pub -m pem

যা পিইএম ফর্ম্যাটে স্ট্যান্ডার্ড আউটপুটে সর্বজনীন কী লিখবে, যা ওপেনএসএসএল পড়তে পারে।

আপনার যদি ব্যক্তিগত কী থাকে এবং এটি একটি আরএসএ কী হয়, তবে আপনি এটি থেকে সর্বজনীন কীটি বের করতে পারেন (আমি ধরে নিই যে পিইএম-এনকোডযুক্ত ব্যক্তিগত কী ফাইলটিতে পাবলিক কীটির একটি অনুলিপি রয়েছে, যেহেতু পাবলিক কী প্রাপ্ত করা সম্ভব নয় ব্যক্তিগত কী থেকে) এবং এটি ব্যবহার করুন:

openssl rsa -in ~/.ssh/id_rsa -pubout

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

শেষ অবধি, আপনি পাবলিক কীটিকে ওপেনএসএসএইচ থেকে ওপেনএসএসএল ফর্ম্যাটে রূপান্তর করতে লার্স নামে একটি চ্যাপ দ্বারা লিখিত পাইথন প্রোগ্রাম ব্যবহার করতে পারেন ।


1
আমি কেবল উল্লেখ করতে চাই যে "ব্যক্তিগত কী থেকে জনসাধারণের চাবি নেওয়া সম্ভব নয়" সত্য নয়। অনুশীলনে (যা প্রকৃতপক্ষে ব্যবহৃত সমস্ত ক্রিপ্টোসিস্টেমগুলিতে) পাবলিক কী সহজেই বেশিরভাগ সময় ব্যক্তিগত কী থেকে উদ্ভূত হয়।
কিরেলেগিন

@ কিরেলাগিন: আমি তা জানতাম না। কীভাবে এটি করা যেতে পারে সে সম্পর্কে আরও তথ্য আপনি আমাকে বলতে বা লিঙ্ক করতে পারেন?
টম অ্যান্ডারসন

1
আমি নিশ্চিত নই যে এই বিষয়ে কিছু নির্দিষ্ট পাঠ আছে কিনা ... আসুন আমরা এটি নিয়ে ভাবি। যে কোনও স্বতন্ত্র লগ ভিত্তিক ক্রিপ্টোসিস্টেম (এলগামাল) নিন। এই ক্ষেত্রে, ব্যক্তিগত কী (গ্রুপ আকার, জেনারেটর, শক্তি) এবং সর্বজনীন কী (গ্রুপ আকার, জেনারেটর, জেনারেটর ^ শক্তি)। সুতরাং, লগ কঠিন, কিন্তু শক্তি নয়, আপনি কেবল এটি গণনা করুন।
কিরেলগিন

আরএসএর ক্ষেত্রে এই বিপর্যয়টি আসলেই কঠিন তবে এখানে পরিস্থিতি কিছুটা আলাদা। সর্বজনীন কী (এন, ডি) এবং ব্যক্তিগত কী হ'ল (এন, ডি ^ (- 1) মোড ফাই (এন))। আপনি ফাই (এন) সংরক্ষণ না করলে ডি বিবর্তন করাও কঠিন হবে, তবে এখানে কৌশলটি: প্রায় সকলেই ই = 65537 ব্যবহার করেন (যখন আপনি কোনও কী তৈরি করেন তখন এই ডিফল্টটি পরিবর্তন করার বিকল্প থাকে, তবে আমি কখনও দেখিনি) যে কেউ এটি ব্যবহার করছেন কারণ এটি কোনও ব্যবহারিক ধারণা তৈরি করে না), তাই কোনও ব্যক্তিগত থেকে জনসাধারণের কী অর্জন করা তুচ্ছ।
কিরেলেগিন

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

10

@ টমের উত্তর আমাকে শুরু করতে সাহায্য করেছে, কিন্তু বাক্সের বাইরে কাজ করে নি।

এই আদেশগুলি এর সাথে কাজ করবে:

  • ওপেনএসএসএল 1.0.1 14 মার্চ 2012
  • OpenSSH_5.9p1

পিকেউটল ব্যবহার করা

# openssl pkeyutl -sign -inkey ~/.ssh/id_sample -in $1 > $1.sig
# ssh-keygen -e -f ~/.ssh/id_sample.pub -m PKCS8 > pub
# openssl pkeyutl -verify -pubin -inkey pub -in $1 -sigfile $1.sig
Signature Verified Successfully

ডিজিএসটি ব্যবহার

# openssl dgst -sign ~/.ssh/id_sample $1 > $1.sig
# ssh-keygen -e -f ~/.ssh/id_sample.pub -m PKCS8 > pub
# openssl dgst -verify pub -signature $1.sig $1
Verified OK

পিকেটল সংস্করণটি কেবলমাত্র ছোট আকারের ফাইলগুলিতে স্বাক্ষর করতে পারে। যদিও ডিজিএসটি বড় আকারের ফাইলগুলিতে স্বেচ্ছায় স্বাক্ষর করতে পারে, কারণ ফলাফলটি সই করার আগে এটি ডাইজেস্ট লাগে।


আমার কাছে স্টিফেন.জেড-এর উত্তরটি বক্স-অফ-অফ-বাক্সে কাজ করেছে। প্রথমে আমি কিছুক্ষণ টমের উত্তর নিয়ে খেলছিলাম এবং অবশেষে আমার কাছে পুরোপুরি কাজ করার জন্য স্টিফেন.জেড উত্তরটি পেয়েছি। ধন্যবাদ স্টিফেন.জেড!
গ্রেজগোর্জ ওয়েয়ারজোইইকি 21

: থানা এখানে আমি আমার স্নিপেট ভাগ করেছি gist.github.com/gwpl/2c7636f0b200cbfbe82cc9d4f6338585
Grzegorz Wierzowiecki

আপনি কি কেবল ফাইলের হ্যাশ সাইন করতে পিকেটল ব্যবহার করার চেষ্টা করেছিলেন?
গাইয়া

-3

এই স্বাক্ষরগুলি যাচাই করতে - সহজ সমাধান:

স্বাক্ষরিত নথিটি একইরূপে নিশ্চিত করার সহজ উপায় হ'ল ডিজিটাল স্বাক্ষর ফাইলটি পুনরায় উত্পন্ন করা এবং তারপরে দুটি স্বাক্ষরকারী ফাইলগুলি একই কিনা তা পরীক্ষা করার জন্য পৃথক ব্যবহার করুন।


3
আপনি হ্যাশ নিয়ে ভাবছেন , স্বাক্ষর নয় । অনুরূপ, তবে একই নয়: হ্যাশ কেবল যাচাই করে যে ফাইলটি পরিবর্তন হয়নি; একটি স্বাক্ষরও এসেছে যে কোথা থেকে এসেছে তা যাচাই করে।
পিসকভোর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.