Pertanyaan Bagaimana kunci publik memverifikasi tanda tangan?


Mencoba mendapatkan gertakan yang lebih baik tentang cara kerja kunci publik / pribadi. Saya memahami bahwa pengirim dapat menambahkan tanda tangan digital ke dokumen dengan menggunakan kunci pribadinya untuk mendapatkan hash dokumen, tetapi yang tidak saya pahami adalah bagaimana kunci publik dapat digunakan untuk memverifikasi tanda tangan itu. Pemahaman saya adalah kunci publik yang mengenkripsi, kunci privat mendekripsi ... adakah yang bisa membantu saya mengerti?


76
2017-08-15 16:29


asal


Jawaban:


Pemahaman Anda tentang "kunci publik mengenkripsi, kunci privat mendekripsi" benar ... untuk ENCRYPTION data / pesan. Untuk tanda tangan digital, itu adalah kebalikannya. Dengan tanda tangan digital, Anda mencoba membuktikan bahwa dokumen yang ditandatangani oleh Anda berasal dari Anda. Untuk melakukan itu, Anda perlu menggunakan sesuatu yang hanya ANDA miliki: kunci pribadi Anda.

Tanda tangan digital dalam deskripsi yang paling sederhana adalah hash (SHA1, MD5, dll.) Dari data (file, pesan, dll.) Yang kemudian dienkripsi dengan kunci pribadi si penandatangan. Karena itu adalah sesuatu yang hanya penandatangan (atau seharusnya) dari mana asal kepercayaan itu. SEMUA ORANG memiliki (atau seharusnya) akses ke kunci publik penandatangan.

Jadi, untuk memvalidasi tanda tangan digital, penerima

  1. Menghitung hash dari data yang sama (file, pesan, dll.),
  2. Mendekripsi tanda tangan digital menggunakan kunci PUBLIC pengirim, dan
  3. Membandingkan 2 nilai hash.

Jika mereka cocok, tanda tangan dianggap valid. Jika mereka tidak cocok, itu berarti bahwa kunci yang berbeda digunakan untuk menandatanganinya, atau bahwa data telah diubah (baik sengaja atau tidak sengaja).

Semoga itu membantu!


120
2017-08-15 18:38



Seperti yang ditunjukkan jawaban atn, kuncinya bekerja terbalik.

Enkripsi kunci publik, dekripsi kunci pribadi (enkripsi):

openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt -out message.ssl
openssl rsautl -decrypt -inkey private.pem       -in message.ssl -out message.txt

Enkripsi kunci pribadi, dekripsi kunci publik (penandatanganan):

openssl rsautl -sign -inkey private.pem       -in message.txt -out message.ssl
openssl rsautl       -inkey public.pem -pubin -in message.ssl -out message.txt

Di bawah ini adalah contoh skrip untuk menguji seluruh aliran ini dengan openssl.

#!/bin/sh
# Create message to be encrypted
echo "Creating message file"
echo "---------------------"
echo "My secret message" > message.txt
echo "done\n"

# Create asymmetric keypair
echo "Creating asymmetric key pair"
echo "----------------------------"
openssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -pubout
echo "done\n"

# Encrypt with public & decrypt with private
echo "Public key encrypts and private key decrypts"
echo "--------------------------------------------"
openssl rsautl -encrypt -inkey public.pem -pubin -in message.txt         -out message_enc_pub.ssl
openssl rsautl -decrypt -inkey private.pem       -in message_enc_pub.ssl -out message_pub.txt
xxd message_enc_pub.ssl # Print the binary contents of the encrypted message
cat message_pub.txt # Print the decrypted message
echo "done\n"

# Encrypt with private & decrypt with public
echo "Private key encrypts and public key decrypts"
echo "--------------------------------------------"
openssl rsautl -sign    -inkey private.pem -in message.txt          -out message_enc_priv.ssl
openssl rsautl -inkey public.pem -pubin    -in message_enc_priv.ssl -out message_priv.txt
xxd message_enc_priv.ssl
cat message_priv.txt
echo "done\n"

Skrip ini menghasilkan yang berikut:

Creating message file
---------------------
done

Creating asymmetric key pair
----------------------------
Generating RSA private key, 1024 bit long modulus
...........++++++
....++++++
e is 65537 (0x10001)
writing RSA key
done

Public key encrypts and private key decrypts
--------------------------------------------
00000000: 31c0 f70d 7ed2 088d 9675 801c fb9b 4f95  1...~....u....O.
00000010: c936 8cd0 0cc4 9159 33c4 9625 d752 5b77  .6.....Y3..%.R[w
00000020: 5bfc 988d 19fe d790 b633 191f 50cf 1bf7  [........3..P...
00000030: 34c0 7788 efa2 4967 848f 99e2 a442 91b9  4.w...Ig.....B..
00000040: 5fc7 6c79 40ea d0bc 6cd4 3c9a 488e 9913  _.ly@...l.<.H...
00000050: 387f f7d6 b8e6 5eba 0771 371c c4f0 8c7f  8.....^..q7.....
00000060: 8c87 39a9 0c4c 22ab 13ed c117 c718 92e6  ..9..L".........
00000070: 3d5b 8534 7187 cc2d 2f94 0743 1fcb d890  =[.4q..-/..C....
My secret message
done

Private key encrypts and public key decrypts
--------------------------------------------
00000000: 6955 cdd0 66e4 3696 76e1 a328 ac67 4ca3  iU..f.6.v..(.gL.
00000010: d6bb 5896 b6fe 68f1 55f1 437a 831c fee9  ..X...h.U.Cz....
00000020: 133a a7e9 005b 3fc5 88f7 5210 cdbb 2cba  .:...[?...R...,.
00000030: 29f1 d52d 3131 a88b 78e5 333e 90cf 3531  )..-11..x.3>..51
00000040: 08c3 3df8 b76e 41f2 a84a c7fb 0c5b c3b2  ..=..nA..J...[..
00000050: 9d3b ed4a b6ad 89bc 9ebc 9154 da48 6f2d  .;.J.......T.Ho-
00000060: 5d8e b686 635f b6a4 8774 a621 5558 7172  ]...c_...t.!UXqr
00000070: fbd3 0c35 df0f 6a16 aa84 f5da 5d5e 5336  ...5..j.....]^S6
My secret message
done

34
2017-11-01 15:17



Pikir saya akan memberikan penjelasan tambahan untuk orang yang mencari sesuatu yang lebih intuitif mengungkapkan.

Sebagian besar kebingungan ini muncul dari penamaan 'kunci publik' dan 'kunci privat' karena bagaimana hal-hal ini benar-benar bekerja bertentangan dengan bagaimana 'kunci' dipahami.

Ambil enkripsi misalnya. Itu bisa dianggap bekerja seperti ini:

  • Pihak-pihak yang ingin dapat membaca pesan rahasia masing-masing menyimpan kunci disembunyikan (yakni kunci pribadi)
  • Pihak-pihak yang ingin dapat mengirim pesan rahasia semua memiliki kemampuan untuk mendapatkan kunci terkunci (yaitu kunci publik)
  • Kemudian mengirim pesan rahasia semudah menguncinya dengan kunci yang tidak terkunci, tetapi membuka kunci setelahnya hanya dapat dilakukan dengan salah satu kunci tersembunyi.

Hal ini memungkinkan pesan rahasia untuk dikirim antarpihak, tetapi dari sudut pandang intuitif di sini, 'kunci publik' adalah nama yang lebih cocok daripada 'kunci publik'.

Namun, untuk mengirim tanda tangan digital, perannya agak terbalik:

  • Pihak yang ingin menandatangani pesan adalah satu-satunya yang memiliki akses ke kunci yang tidak terkunci (yaitu kunci pribadi)
  • Pihak-pihak yang ingin memverifikasi tanda tangan semuanya memiliki kemampuan untuk mendapatkan kunci (yaitu kunci publik)
  • Lalu apa yang dilakukan penandatangan adalah membuat dua pesan yang identik: pesan yang dapat dibaca siapa saja dan yang lain untuk menyertainya, tetapi yang dikunci dengan salah satu kunci pribadi mereka.
  • Kemudian ketika penerima mendapat pesan, mereka dapat membacanya, lalu menggunakan kunci publik untuk membuka kunci pesan yang dikunci dan membandingkan kedua pesan tersebut. Jika pesannya sama, maka mereka tahu bahwa:

    1. Pesan yang tidak terkunci tidak dirusak selama perjalanan dan,

    2. Pesannya pasti dari orang yang memiliki kunci yang cocok dengan kunci publik mereka.

  • Dan akhirnya, seluruh sistem ini hanya berfungsi jika siapa saja yang ingin memvalidasi tanda tangan penandatangan memiliki tempat otoritatif untuk pergi ke untuk mendapatkan kunci yang cocok untuk kunci penandatangan. Jika tidak, siapa pun dapat berkata "Hei, ini kunci untuk kunci pribadi", mengirimi Anda pesan yang berpura-pura menjadi mereka tetapi menguncinya dengan kunci pribadi mereka, Anda melakukan semua langkah di atas dan percaya bahwa pesan itu harus benar-benar dari orang yang Anda pikirkan, tetapi Anda terkecoh karena Anda menyesatkan pemilik kunci publik yang sebenarnya.

Selama ada sumber terpercaya untuk mengambil kunci publik penanda, Anda akan tahu siapa pemilik kunci publik yang berhak, dan akan dapat memvalidasi tanda tangan mereka.


0
2018-03-02 21:37