"BEGIN RSA PRIVATE KEY" এবং "শুরু করুন প্রাইভেট কী" এর মধ্যে পার্থক্য


150

হাই আমি এমন একটি প্রোগ্রাম লিখছিলাম যা একটি .pemফাইল থেকে প্রাইভেট কীগুলি আমদানি করে এবং পরে এটি ব্যবহারের জন্য একটি ব্যক্তিগত কী অবজেক্ট তৈরি করে .. আমি যে সমস্যাটি সম্মুখীন হয়েছি তা হ'ল কিছু pemফাইলের শিরোনাম দিয়ে শুরু হয়

-----BEGIN PRIVATE KEY-----

অন্যদের দিয়ে শুরু করা

-----BEGIN RSA PRIVATE KEY-----

আমার অনুসন্ধানের মাধ্যমে আমি জানতাম যে PKCS#8প্রথমগুলি ফর্ম্যাট করা হয়েছে তবে আমি বুঝতে পারি না যে অন্যটি কী ফর্ম্যাটটির সাথে সম্পর্কিত।

উত্তর:


183

Https://polarssl.org/kb/cryptography/asn1-key-structures-in-der-and-pem দেখুন ("BEGIN RSA PRIVATE KEY" এর জন্য পৃষ্ঠাটি অনুসন্ধান করুন) ( উত্তরোত্তর জন্য সংরক্ষণাগার লিঙ্ক , সেক্ষেত্রে ক্ষেত্রে))

BEGIN RSA PRIVATE KEYপিকেসিএস # 1 এবং এটি কেবল একটি আরএসএ কী। এটি মূলত পিকেসিএস # 8 এর মূল বিষয়, তবে সামনে সংস্করণ বা অ্যালগরিদম সনাক্তকারী ছাড়াই। BEGIN PRIVATE KEYপিকেসিএস # 8 এবং এটি নির্দেশ করে যে কী টাইপটি মূল ডেটাতে অন্তর্ভুক্ত। লিঙ্ক থেকে:

এনক্রিপ্ট করা পিকেসিএস # 8 এনকোডড ডেটা ট্যাগগুলি দিয়ে শুরু এবং শেষ হয়:

-----BEGIN PRIVATE KEY-----
BASE64 ENCODED DATA
-----END PRIVATE KEY-----

বেস64 64 এনকোডড ডেটাতে নিম্নলিখিত ডিইআর কাঠামোটি উপস্থিত রয়েছে:

PrivateKeyInfo ::= SEQUENCE {
  version         Version,
  algorithm       AlgorithmIdentifier,
  PrivateKey      BIT STRING
}

AlgorithmIdentifier ::= SEQUENCE {
  algorithm       OBJECT IDENTIFIER,
  parameters      ANY DEFINED BY algorithm OPTIONAL
}

সুতরাং কোনও আরএসএ প্রাইভেট কীটির জন্য, ওআইডিটি 1.2.840.113549.1.1.1 এবং প্রাইভেটকে কী ডেটা বিটস্ট্রিং হিসাবে একটি আরএসপ্রাইভেটিকে রয়েছে।

এর বিপরীতে BEGIN RSA PRIVATE KEY, যা সর্বদা একটি আরএসএ কী নির্দিষ্ট করে এবং তাই কোনও মূল ধরণের ওআইডি অন্তর্ভুক্ত করে না। BEGIN RSA PRIVATE KEYহ'ল PKCS#1:

আরএসএ প্রাইভেট কী ফাইল (পিকেসিএস # 1)

আরএসএ প্রাইভেট কী পিএম ফাইলটি আরএসএ কীগুলির জন্য নির্দিষ্ট।

এটি ট্যাগ দিয়ে শুরু এবং শেষ হয়:

-----BEGIN RSA PRIVATE KEY-----
BASE64 ENCODED DATA
-----END RSA PRIVATE KEY-----

বেস64 64 এনকোডড ডেটাতে নিম্নলিখিত ডিইআর কাঠামোটি উপস্থিত রয়েছে:

RSAPrivateKey ::= SEQUENCE {
  version           Version,
  modulus           INTEGER,  -- n
  publicExponent    INTEGER,  -- e
  privateExponent   INTEGER,  -- d
  prime1            INTEGER,  -- p
  prime2            INTEGER,  -- q
  exponent1         INTEGER,  -- d mod (p-1)
  exponent2         INTEGER,  -- d mod (q-1)
  coefficient       INTEGER,  -- (inverse of q) mod p
  otherPrimeInfos   OtherPrimeInfos OPTIONAL
}

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

1
আমি কল্পনা করতে চাই যে সোনিকের উত্তরে প্রদত্ত যে কোনও ব্যক্তিগত কী ট্যাগগুলি নিখরচায় খেলা।
জেসন সি

আরএসএ কীগুলির জন্য, পিকেসিএস # 1 টিতে সিআরটি প্যারামিটার রয়েছে, পিকেসিএস # 8 নেই। আপনি আকারগুলি দেখে এটি নিশ্চিত করতে পারেন। আরও বেশি শিরোনাম যুক্ত হওয়ার সাথে সাথে পিকেসিএস # 8 আরও ছোট। আপনি যদি পারফরম্যান্সের বিষয়ে চিন্তা করেন তবে পিকেসিএস # 1 ব্যবহার করুন। আমার পরীক্ষাটি 3 বার দ্রুত দেখায়।
জেডজেড কোডার

5
@ জেডজেড কোডার, আপনি কীগুলি কীভাবে উত্পন্ন করেছেন এবং কার্য সম্পাদন পরীক্ষা করেছেন সে সম্পর্কে কিছু বিবরণ দিতে পারেন? openssl genpkey -algorithm RSA -out key.pemপিকেসিএস # 8 কী উত্পন্ন করে যা সিআরটি প্যারামিটারগুলিকে অন্তর্ভুক্ত করে।
ভাদিম কুজনেস্তভ

5
একটি পিকেসিএস # 1 কী তৈরি করতে openssl genrsaকমান্ডটি ব্যবহার করা যেতে পারে। openssl reqপ্রাইভেট কী এবং crt উভয়ই উত্পন্ন করতে ব্যবহার করে একটি পিকেসিএস # 8 কী শেষ হবে । genpkeyম্যানুয়াল রাজ্যের The use of the genpkey program is encouraged over the algorithm specific utilities because additional algorithm options and ENGINE provided algorithms can be used.। তবে কিছু সফ্টওয়্যার ( mysql) কেবলমাত্র পিকেসিএস # 1 কী ব্যবহার করতে পারে । পিকেসিএস # 8 থেকে পিকেসিএস # 1 এ রূপান্তরকরণ দিয়ে কাজ করা যেতে পারে openssl rsa -in key.pem -out key.pem। অন্য উপায়ে রূপান্তরটি দিয়ে কাজটি করা যেতে পারে openssl pkey -in key.pem -out key.pem
পল টোবিয়াস

28

একবার দেখুন <openssl/pem.h>। এটি সম্ভাব্য বিগইন মার্কার দেয়।

দ্রুত রেফারেন্সের জন্য উপরের লিঙ্ক থেকে সামগ্রীটি অনুলিপি করা:

#define PEM_STRING_X509_OLD "X509 CERTIFICATE"
#define PEM_STRING_X509     "CERTIFICATE"
#define PEM_STRING_X509_PAIR    "CERTIFICATE PAIR"
#define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE"
#define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST"
#define PEM_STRING_X509_REQ "CERTIFICATE REQUEST"
#define PEM_STRING_X509_CRL "X509 CRL"
#define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY"
#define PEM_STRING_PUBLIC   "PUBLIC KEY"
#define PEM_STRING_RSA      "RSA PRIVATE KEY"
#define PEM_STRING_RSA_PUBLIC   "RSA PUBLIC KEY"
#define PEM_STRING_DSA      "DSA PRIVATE KEY"
#define PEM_STRING_DSA_PUBLIC   "DSA PUBLIC KEY"
#define PEM_STRING_PKCS7    "PKCS7"
#define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA"
#define PEM_STRING_PKCS8    "ENCRYPTED PRIVATE KEY"
#define PEM_STRING_PKCS8INF "PRIVATE KEY"
#define PEM_STRING_DHPARAMS "DH PARAMETERS"
#define PEM_STRING_DHXPARAMS    "X9.42 DH PARAMETERS"
#define PEM_STRING_SSL_SESSION  "SSL SESSION PARAMETERS"
#define PEM_STRING_DSAPARAMS    "DSA PARAMETERS"
#define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY"
#define PEM_STRING_ECPARAMETERS "EC PARAMETERS"
#define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY"
#define PEM_STRING_PARAMETERS   "PARAMETERS"
#define PEM_STRING_CMS      "CMS"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.