Tampaknya keduanya adalah algoritma enkripsi yang membutuhkan kunci publik dan pribadi. Mengapa saya memilih satu versus yang lain untuk menyediakan enkripsi di aplikasi server klien saya?
Tampaknya keduanya adalah algoritma enkripsi yang membutuhkan kunci publik dan pribadi. Mengapa saya memilih satu versus yang lain untuk menyediakan enkripsi di aplikasi server klien saya?
Jawaban:
Enkripsi dan dekripsi RSA RSA bersifat komutatif
sehingga dapat digunakan langsung sebagai skema tanda tangan digital dengan skema
RSA {(e, R), (d, p, q)}
untuk menandatangani pesan M, hitung:
S = M daya d (mod R)
untuk memverifikasi tanda tangan, hitung:
M = S daya e (mod R) = M daya ed (mod R) = M (mod R)
RSA dapat digunakan baik untuk enkripsi dan tanda tangan digital,
cukup dengan membalik urutan eksponen yang digunakan: eksponen rahasia (d) untuk membuat tanda tangan, eksponen publik (e) bagi siapa saja untuk memverifikasi tanda tangan. Yang lainnya identik.
DSA (Digital Signature Algorithm)
DSA merupakan varian pada ElGamal dan algoritma Schnorr menciptakan tanda tangan 320 bit, namun dengan keamanan 512-1024 bit lagi-lagi bertumpu pada kesulitan komputasi discrete logarithms yang telah cukup diterima secara luas
DSA Key Generation
pertama kali dibagikan kepada publik global nilai kunci (p, q, g) dipilih:
pilih bilangan prima besar p = 2 daya L di
mana L = 512 hingga 1024 bit dan merupakan kelipatan 64
pilih q, faktor prima 160 bit dari p-1
pilih g = h power (p-1) / q
untuk h1 apa saja,
lalu setiap pengguna memilih kunci pribadi dan menghitung kunci publik mereka:
pilih x hitung y = g daya x (mod p)
Pembangkitan kunci DSA terkait dengan, tetapi agak lebih kompleks daripada El Gamal. Sebagian besar karena penggunaan modulus q 160-bit sekunder yang digunakan untuk membantu mempercepat penghitungan dan mengurangi ukuran tanda tangan yang dihasilkan.
Pembuatan Tanda Tangan DSA dan Verifikasi
untuk menandatangani pesan M
menghasilkan kunci tanda tangan acak k, k menghitung
r = (g daya k (mod p)) (mod q)
s = k-1.SHA (M) + xr (mod q)
kirim tanda tangan (r, s) dengan pesan
untuk memverifikasi tanda tangan, hitung:
w = s-1 (mod q)
u1 = (SHA (M) .w) (mod q)
u2 = rw (mod q)
v = (g daya u1.y daya u2 (mod p)) (mod q)
jika v = r maka tanda tangan diverifikasi
Pembuatan tanda tangan sekali lagi mirip dengan ElGamal dengan menggunakan kunci tanda tangan sementara per pesan, tetapi melakukan kalk pertama mod p, kemudian mod q untuk mengurangi ukuran hasilnya. Perhatikan bahwa penggunaan fungsi hash SHA secara eksplisit di sini. Verifikasi juga terdiri dari membandingkan dua perhitungan, lagi-lagi menjadi sedikit lebih rumit daripada, tetapi terkait dengan El Gamal.
Perhatikan bahwa hampir semua kalkulasi adalah mod q, dan karenanya jauh lebih cepat.
Namun, berbeda dengan RSA, DSA hanya dapat digunakan untuk tanda tangan digital
Keamanan DSA
Kehadiran saluran subliminal ada di banyak skema (yang membutuhkan nomor acak untuk dipilih), tidak hanya DSA. Ini menekankan perlunya "keamanan sistem", bukan hanya algoritme yang baik.
Cek jawaban AVA di bawah ini .
Jawaban lama saya sepertinya salah
Dengan mengacu pada man ssh-keygen
, panjang kunci DSA dibatasi tepat 1024 bit agar tetap sesuai dengan FIPS 186-2 NIST. Meskipun demikian, kunci DSA yang lebih panjang secara teoritis dimungkinkan; FIPS 186-3 secara eksplisit mengizinkannya. Selain itu, keamanan tidak lagi dijamin dengan kunci RSA atau DSA sepanjang 1024 bit.
Kesimpulannya, kunci RSA 2048 bit saat ini adalah pilihan terbaik.
Membuat koneksi SSH yang aman memerlukan lebih dari sekadar memilih teknologi pasangan kunci enkripsi yang aman. Mengingat wahyu NSA Edward Snowden, seseorang harus lebih waspada daripada yang sebelumnya dianggap cukup.
Untuk menyebutkan satu contoh saja, menggunakan algoritma pertukaran kunci yang aman sama pentingnya. Berikut adalah ikhtisar bagus tentang praktik pengerasan SSH terbaik saat ini .
ssh-keygen
mengizinkan kunci berukuran bit lain juga (saya sendiri menggunakan kunci DSA 2048 bit yang dihasilkan menggunakan ssh-keygen
di RHEL).