Pertanyaan Ukuran tanda tangan RSA?


Saya ingin tahu berapa panjang tanda tangan RSA? Apakah selalu ukuran yang sama dengan ukuran kunci RSA seperti jika ukuran kunci adalah 1024 maka tanda tangan RSA adalah 128 byte, jika ukuran kunci adalah 512 bit maka tanda tangan RSA adalah 64 byte? apa itu modulus RSA? Juga apa artinya RSA-sha1? Setiap pointer sangat dihargai.


32
2017-07-12 01:57


asal


Jawaban:


Anda benar, ukuran tanda tangan RSA tergantung pada ukuran kunci, ukuran tanda tangan RSA sama dengan panjang modulus dalam byte. Ini berarti bahwa untuk "kunci n bit", tanda tangan yang dihasilkan akan persis n bit panjang. Meskipun nilai tanda tangan yang dikomputasi belum tentu n bit, hasilnya akan empuk agar sama persis n bit.

Sekarang inilah cara kerjanya: RSA algoritma didasarkan pada eksponensial modular. Untuk perhitungan seperti itu hasil akhir adalah sisa dari hasil "normal" dibagi dengan modulus. Aritmatika modular memainkan peran besar dalam Teori Angka. Di sana definisi untuk kongruen (≡) adalah

m is congruent to n mod k if k divides m - n

Contoh sederhana - biarkan n = 2 dan k = 7, lalu

2 ≡ 2 (mod 7) because: 7 divides 2 - 2
9 ≡ 2 (mod 7) because: 7 divides 9 - 2
16 ≡ 2 (mod 7) because: 7 divides 16 - 2
...

7 sebenarnya tidak bagilah 0, definisi untuk pembagian adalah

Sebuah bilangan bulat membagi bilangan bulat b jika ada bilangan bulat n dengan properti yang b = na

Untuk a = 7 dan b = 0 pilih n = 0. Ini menyiratkan bahwa setiap bilangan bulat membagi 0, tetapi juga menyiratkan bahwa kesesuaian dapat diperluas ke angka negatif (tidak akan masuk ke rincian di sini, itu tidak penting untuk RSA).

Jadi intinya adalah bahwa prinsip kesesuaian memperluas pemahaman kita tentang sisa-sisa, modulus adalah "angka setelah mod", dalam contoh kita akan menjadi 7. Karena ada jumlah tak terbatas angka yang kongruen diberikan modulus, kita berbicara ini sebagai kelas kesesuaian dan biasanya memilih satu wakil (integer kongruen terkecil> 0) untuk perhitungan kami, seperti yang kami lakukan secara intuitif ketika berbicara tentang "sisa" dari perhitungan.

Di RSA, penandatanganan pesan m berarti eksponensial dengan "eksponen pribadi" d, hasil r adalah bilangan bulat terkecil> 0 dan lebih kecil dari modulus n sehingga

m^d ≡ r (mod n)

Ini menyiratkan dua hal

  • Panjang r (dalam bit) dibatasi oleh n (dalam bit)
  • Panjang m (dalam bit) harus <= n (dalam bit, juga)

Untuk membuat tanda tangan persis n bit panjang, beberapa bentuk padding diterapkan. Cf. PKC # 1 untuk opsi yang valid.

Fakta kedua menyiratkan bahwa pesan yang lebih besar dari n harus ditandatangani dengan memecah m dalam beberapa potongan <= n, tetapi ini tidak dilakukan dalam praktik karena akan terlalu lambat (eksponensial modular adalah komputasi mahal), jadi kita perlu cara lain untuk "memampatkan" pesan kami menjadi lebih kecil dari n. Untuk tujuan ini kami gunakan fungsi hash cryptographically aman seperti SHA-1 yang Anda sebutkan. Menerapkan SHA-1 ke pesan arbitrary-length m akan menghasilkan "hash" yang panjangnya 20 byte, lebih kecil dari ukuran tipikal dari modulus RSA, ukuran umum adalah 1024 bit atau 2048 bit, yaitu 128 atau 256 byte, jadi perhitungan tanda tangan dapat diterapkan untuk setiap pesan arbitrer.

Sifat-sifat kriptografi dari fungsi hash seperti itu memastikan (dalam teori - pemalsuan tanda tangan adalah topik besar dalam komunitas riset) bahwa tidak mungkin untuk memalsukan tanda tangan selain dengan kekerasan.


44
2017-07-12 09:41