জিপিজি - ট্রাস্ট চেইন তৈরি না করে স্বাক্ষর যাচাই করছেন?


16

এই কীটি আমদানি ও স্বাক্ষর ও বিশ্বাস না করেই কোনও ফাইল কোনও নির্দিষ্ট পাবলিক কী ফাইল দ্বারা স্বাক্ষরিত হয়েছিল কিনা তা যাচাই করতে জিপিজি (বা জিপিজি 4উইন) কে জিজ্ঞাসা করা সম্ভব?

যেমন কিছু

gpg --using-key pubkey.txt --verify message.txt

আপনার নিজস্ব প্রাইভেট কী তৈরি করতে হবে এবং তারপরে এর বিপরীতে

gpg --import pubkey.txt 
gpg --lsign-key [name within pubkey.txt]
# ... something to do with choosing trust levels
gpg --verify message.txt

1
কমান্ডটি gpg --status-fd 1 --verify (thefile)তার আউটপুটে প্রথম স্ট্রিং হিসাবে কীটির ফিঙ্গারপ্রিন্ট দেয় যা স্বাক্ষর করে কিনা তা দেখার চেষ্টা করুন ।
harrymc

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

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

উত্তর:


13

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

এখানে আমার নিজের কী দ্বারা স্বাক্ষরিত একটি ফাইল দিয়ে একটি পরীক্ষা করা হয়েছে তবে কী সিস্টেমে কীটি আমদানি করা হয়নি:

[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Can't check signature: public key not found
[ben@seditious tmp]$ gpg -v --status-fd 1 --verify thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
[GNUPG:] ERRSIG 7FF2D37135C7553C 1 10 00 1380142299 9
[GNUPG:] NO_PUBKEY 7FF2D37135C7553C
gpg: Can't check signature: public key not found
[ben@seditious tmp]$ 

দুর্ভাগ্যক্রমে হ্যারির পরামর্শ কার্যকর হয় না, এটি কিছুটা আরও তথ্য বের করে, তবে ব্যবহারের জন্য যথেষ্ট নয়।

যেমন আপনি দেখতে পাচ্ছেন, প্রাপ্ত সর্বাধিক তথ্য হ'ল স্বাক্ষরটি তৈরি করার জন্য ব্যবহৃত সাবকিটির মূল আইডি এবং স্বাক্ষরটি তৈরির সময়। এটি পিজিপিডাম্পের সাথে উপলব্ধ ডেটার সাথে মেলে (বা - তালিকা-প্যাকেট):

bash-3.2$ pgpdump thing.txt.gpg 
Old: Compressed Data Packet(tag 8)
    Comp alg - ZLIB <RFC1950>(comp 2)
Old: One-Pass Signature Packet(tag 4)(13 bytes)
    New version(3)
    Sig type - Signature of a binary document(0x00).
    Hash alg - SHA512(hash 10)
    Pub alg - RSA Encrypt or Sign(pub 1)
    Key ID - 0x7FF2D37135C7553C
    Next packet - other than one pass signature
Old: Literal Data Packet(tag 11)(24 bytes)
    Format - binary
    Filename - thing.txt
    File modified time - Thu Sep 26 06:51:39 EST 2013
    Literal - ...
Old: Signature Packet(tag 2)(412 bytes)
    Ver 4 - new
    Sig type - Signature of a binary document(0x00).
    Pub alg - RSA Encrypt or Sign(pub 1)
    Hash alg - SHA512(hash 10)
    Hashed Sub: signature creation time(sub 2)(4 bytes)
        Time - Thu Sep 26 06:51:39 EST 2013
    Sub: issuer key ID(sub 16)(8 bytes)
        Key ID - 0x7FF2D37135C7553C
    Hash left 2 bytes - f0 97 
    RSA m^d mod n(3066 bits) - ...
        -> PKCS-1
bash-3.2$ 

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

তারপরে আমি সেই সিস্টেমে আমার সর্বজনীন কীটি আমদানি করে আবার চেষ্টা করেছি:

[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E  55C4 321E 4E23 7359 0E5D
     Subkey fingerprint: B7F0 FE75 9387 430D D0C5  8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512
[ben@seditious tmp]$ 

এখন এটি কীটি সনাক্ত করতে এবং প্রাথমিক কীতে এটি মেলে সক্ষম। তবে এই জাতীয় সতর্কতার প্রকৃতি হ্রাস করা সম্ভব:

[ben@seditious tmp]$ gpg -v --verify --trust-model always thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: Using untrusted key!
gpg: binary signature, digest algorithm SHA512
[ben@seditious tmp]$ 

এখনও একটি সতর্কতা রয়েছে যে এটি একটি অবিশ্বাস্য কী, তবে ব্যাপকভাবে তা নয় এবং ভার্বোসটি অপসারণ কেবল এটিকে হ্রাস করে:

[ben@seditious tmp]$ gpg --verify --trust-model always thing.txt.gpg 
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M (backup email address) <benm@REDACTED>"
gpg: WARNING: Using untrusted key!
[ben@seditious tmp]$ 

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

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

সম্পাদনা: আপনি যদি পাবলিক কী ফাইলটি সরাসরি কিরিংয়ের মতো কল করতে পারেন যদি আপনার এটি অ-এসকিআইআই সাঁজোয়া বিন্যাসে থাকে (অর্থাত্। .্যাস্ক ফাইলের পরিবর্তে .gpg ফাইল) থাকে। তবুও, আপনার এখনও পাবলিক কী দরকার। কমান্ডটি এটি করার মতো:

[ben@seditious ~]$ gpg -v --no-default-keyring --keyring /tmp/mykey.gpg --verify /tmp/thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg:                 aka "Ben M (backup email address) <benm@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E  55C4 321E 4E23 7359 0E5D
     Subkey fingerprint: B7F0 FE75 9387 430D D0C5  8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512
[ben@seditious ~]$ 

আপনার আউটপুট দেখে, আমি ঠিক বিপরীত সিদ্ধান্তে পৌঁছেছি। আমি আমার উত্তরে আপনার আউটপুট ব্যবহার করেছি, তবে আপনাকে এর জন্য ক্রেডিট দিয়েছি।
harrymc

অংশ পাঠাতে যা subkey এর কী আইডি দীর্ঘ ফর্ম (টেকনিক্যালি পূর্ণ চাবি আইডি নয় থেকে হয় ফিঙ্গারপ্রিন্ট) শুধুমাত্র শনাক্তযোগ্য অংশ। পাবলিক কী দখল না করে, আপনি মাস্টার কী সনাক্ত করতে পারবেন না বা স্বাক্ষরটি যাচাই করতে পারবেন না । এর বিবরণগুলি আরএফসি 4880 এর বিভাগ 5.2 এ রয়েছে (বিভাগ 2.2 এর সামান্য বিট সহ, তবে 5.2 যেখানে দরকারী জিনিস রয়েছে)। আমি যদি ভুলটি চাবির অনুলিপি ছাড়া যাচাই প্রমাণ করি (ইঙ্গিত: আপনি আমার উদাহরণ দিয়ে এটি করতে পারবেন না)।
বেন

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

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

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

2

আপনি একটি কি-রিং শিপিং বরং একটি সর্বজনীন কী ফাইল চেয়ে সঙ্গে ঠিক আছে হন, আপনি সম্ভবত ব্যবহার করতে চান gpgvপরিবর্তে gpg:

gpgv --keyring key.ring somefile.txt

0

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

আমার মন্তব্য যাচাই করতে @ বেন দ্বারা চালিত পরীক্ষাগুলি অনুসারে , নিম্নলিখিত কমান্ডটি স্বাক্ষর কীটি উচ্চতরভাবে নির্দেশ করতে ব্যবহৃত হতে পারে:

gpg --status-fd 1 --verify thefile.gpg

বেনের পরীক্ষা নীচে ফলাফল দিয়েছে। লক্ষণীয় বিষয় হল ERRSIG এবং NO_PUBKEY এর মান এবং "আরএসএ কী আইডি" এর মান যা উভয়টিতে আংশিকভাবে অন্তর্ভুক্ত রয়েছে:

[ben@seditious tmp]$ gpg -v --status-fd 1 --verify thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
[GNUPG:] ERRSIG 7FF2D37135C7553C 1 10 00 1380142299 9
[GNUPG:] NO_PUBKEY 7FF2D37135C7553C
gpg: Can't check signature: public key not found

স্ট্রিং উপরে নোট 7FF2D37135C7553C। এই একই স্ট্রিংটি কী ফিঙ্গারপ্রিন্টের ভিতরে পাওয়া যায় যা একবার কী আমদানি করার পরে প্রতিবেদন করা হয়:

[ben@seditious ~]$ gpg -v --no-default-keyring --keyring /tmp/mykey.gpg --verify /tmp/thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: using subkey 35C7553C instead of primary key 73590E5D
gpg: using PGP trust model
gpg: Good signature from "Ben M <ben@REDACTED>"
gpg:                 aka "Ben M (backup email address) <benm@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg:                 aka "Ben M <ben.m@REDACTED>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: DB47 24E6 FA42 86C9 2B4E  55C4 321E 4E23 7359 0E5D
     Subkey fingerprint: B7F0 FE75 9387 430D D0C5  8BDB 7FF2 D371 35C7 553C
gpg: binary signature, digest algorithm SHA512

এই স্ট্রিংটি ফিঙ্গারপ্রিন্টের নীচের অংশ (উপরে সাবকি) হিসাবে পাওয়া যায়, তাই সম্ভবত কীটি সনাক্ত করতে ব্যবহৃত হতে পারে। সাবকি ছাড়াও "প্রাথমিক কী ফিঙ্গারপ্রিন্ট" সম্ভবত যাচাই করা উচিত।

"আরএসএ কী আইডি" স্ট্রিং উভয় আউটপুটগুলিতে অভিন্ন এবং ফিঙ্গারপ্রিন্টের শেষ অংশ হিসাবেও পাওয়া যায়, সুতরাং স্বাক্ষর সনাক্তকরণের পক্ষে এটি নিজেই যথেষ্ট হতে পারে। যদি এটি হয় তবে কেবলমাত্র আউটপুট ব্যবহার gpg --verifyকরা সহজ উপায় দ্বারা স্বাক্ষর সনাক্ত করতে যথেষ্ট।

[ben@seditious tmp]$ gpg -v --verify thing.txt.gpg 
gpg: original file name='thing.txt'
gpg: Signature made Thu 26 Sep 2013 06:51:39 AM EST using RSA key ID 35C7553C
gpg: Can't check signature: public key not found

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

আবার পরিষ্কারভাবে বলতে: এই পদ্ধতিটি স্বাক্ষরটিকে পুরোপুরি সনাক্ত করতে পারে না। এটি স্বাক্ষরযুক্ত দস্তাবেজগুলিকে গুরুতরভাবে বাছাই করার একমাত্র উপায়।


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

@ বেন: আমি পুনরুক্তি করি যে এটি কেবলমাত্র একটি তাত্পর্যবাদী, যা কোনও কিছুর আমদানি ও স্বাক্ষর ও বিশ্বাস ছাড়াই কোনও নির্দিষ্ট পাবলিক কী ফাইল দ্বারা স্বাক্ষরিত হয়েছিল কিনা তা যাচাইকরণের পোস্টারের প্রশ্নের উত্তরে সবচেয়ে ভাল করা যেতে পারে which "।
harrymc

যদি আমি বলেছিলাম যে আমরা .pub ফাইলের কোনও কীগুলিতে বিশ্বাস করি (এই নির্দিষ্ট ডেটা ফাইলটি পরীক্ষা করার উদ্দেশ্যে) এবং আমরা এই .pub ফাইলটিকে কেন বিশ্বাস করতে বেছে নিয়েছি তার কারণগুলি কি প্রশ্নটিকে আরও পরিষ্কার করে দেবে? কোন জিপিজির কার্যকলাপ?
ওজেডব্লিউ

.Pub ফাইলে কীগুলি তালিকাভুক্ত করার এবং তাদের আরএসএ কী আইডি তুলনা করার তাত্পর্যপূর্ণ কি কার্যকর হবে? চেষ্টা করার জন্য আমার কাছে এখানে জিপিজি নেই তবে সম্ভবত "জিপিজি - না-ডিফল্ট-কীরিং - কিরিং <pub-file> --list-key" এর মতো কিছু।
harrymc
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.