it-swarm-id.com

SHA, RSA dan hubungan di antara mereka

SHA adalah mekanisme hashing. Namun, RSA adalah algoritma enkripsi.

Jadi apakah algoritma RSA menggunakan SHA mekanisme hashing untuk menghasilkan kunci hashing yang pada gilirannya digunakan untuk mengenkripsi pesan ??

Apalagi RSA sendiri memberikan 2 kunci. Satu dapat disimpan publik dan satu pribadi. Sekarang, kunci-kunci ini dapat digunakan untuk mengenkripsi dan mendekripsi. Ref: RSA . Lalu apa gunanya SHA di RSA?

Dalam sertifikat yang diberikan oleh situs mana pun yang memberikan keamanan HTTPS, ada SHA serta hadiah kunci MD5. Bagaimana ini diproduksi dan digunakan dalam ekripsi atau dekripsi data yang ditransfer ke browser ?

36
whitehat

RSA sebenarnya adalah dua algoritma, satu untuk enkripsi asimetris, dan satu untuk tanda tangan digital (algoritma tanda tangan secara tradisional - tetapi tidak tepat - digambarkan sebagai "enkripsi dengan kunci pribadi "dan ini adalah sumber kebingungan yang tak ada habisnya).

Enkripsi asimetris menggunakan kunci. Kunci adalah parameter untuk algoritma; algoritme itu sendiri sama untuk semua orang (dalam istilah perangkat lunak, ini adalah file yang dapat dieksekusi) sementara kunci bervariasi antar pengguna. Dalam pasangan kunci, kunci publik adalah kunci yang digunakan untuk mengenkripsi data (mengonversi sebagian data , yaitu urutan byte, ke urutan byte lain yang tidak terduga untuk semua orang) sedangkan kunci pribadi adalah kunci yang memungkinkan seseorang untuk mendekripsi data ( yaitu membalikkan enkripsi).

Sedangkan pada enkripsi simetris , kunci enkripsi dan dekripsi identik, tapi dengan enkripsi asimetris, kunci enkripsi dan dekripsi berbeda satu sama lain (karenanya namanya); mereka secara matematis dihubungkan bersama-sama, tetapi seharusnya tidak layak (mis. terlalu sulit untuk dilakukan hanya dengan sekelompok komputer) untuk memulihkan kunci dekripsi dari kunci enkripsi. Inilah sebabnya mengapa kunci enkripsi dapat dibuat publik sementara kunci dekripsi dirahasiakan: mengungkapkan kunci publik tidak mengungkapkan kunci pribadi.

Apa yang dicapai enkripsi asimetris bukanlah hal yang sepele. Kemungkinan untuk mengungkapkan kunci publik tanpa mengatakan terlalu banyak tentang kunci privat, tetapi sedemikian rupa sehingga kedua kunci bekerja bersama (apa yang dienkripsi dengan kunci publik dapat didekripsi dengan kunci privat yang sesuai, tetapi tidak lain), membutuhkan banyak matematika! RSA penuh dengan matematika. Ini kontras dengan algoritma enkripsi simetris yang merupakan "hanya" cara untuk membuat kekacauan besar data dengan mencampur bit bersama-sama.

Enkripsi asimetris adalah alat alami untuk digunakan ketika kami ingin memungkinkan transmisi rahasia antara dua pengguna di antara populasi besar. Jika Anda memiliki 1000 pengguna, dan Anda ingin salah satu dari dua pengguna tersebut dapat bertukar data satu sama lain tanpa mengizinkan siapa pun memata-matai mereka (termasuk 998 pengguna lain), maka solusi klasiknya adalah dengan mendistribusikan kunci untuk enkripsi simetris. untuk setiap pasangan pengguna. Alice dan Bob akan memiliki kunci umum yang diketahui; Alice dan Charlie juga akan memiliki kunci bersama (tidak sama); dan begitu juga Bob dan Charlie; dan seterusnya. Setiap pengguna perlu mengingat "kunci bersama" -nya dengan setiap satu dari 999 pengguna lainnya, dan Anda akan memiliki total 499500 kunci. Menambahkan pengguna ke-1001 akan melibatkan pembuatan 1000 kunci simetris tambahan, dan memberikan satu untuk masing-masing dari 1000 pengguna yang ada. Seluruh distribusi kunci segera berubah menjadi mimpi buruk yang tidak dapat digunakan/tidak layak. Dengan enkripsi asimetris meskipun, segala sesuatunya jauh lebih mudah dalam hal distribusi kunci: setiap pengguna hanya perlu mengingat kunci privasinya sendiri; dan kunci publik (menjadi publik) dapat didistribusikan melalui semacam penyiaran (mis. direktori).

RSA memiliki beberapa kendala operasional. Dengan varian yang paling sering digunakan (yang dikenal sebagai PKCS # 1 v1.5 ), jika ukuran kunci RSA adalah "1024 bit" (artinya komponen matematika pusat dari pasangan kunci adalah 1024-bit integer), kemudian RSA dapat mengenkripsi pesan dengan panjang hingga 117 byte, dan menghasilkan pesan terenkripsi dengan panjang 128 byte. Ukuran terbatas itu, dan ukurannya bertambah ketika mengenkripsi, adalah konsekuensi tak terhindarkan dari struktur matematika proses enkripsi RSA. Karena kendala ini, kami biasanya tidak mengenkripsi data langsung dengan RSA; sebagai gantinya, kami memilih urutan kecil byte acak, yang kami sebut kunci sesi. Kami mengenkripsi kunci sesi dengan RSA; dan kemudian kita menggunakan kunci sesi dengan simetris algoritma enkripsi untuk memproses seluruh pesan. Ini disebut enkripsi hibrid .


SHA adalah nama umum untuk keluarga fungsi hash kriptografis . Anggota pertama dari keluarga itu dideskripsikan dengan nama 'SHA' tetapi segera ditinggalkan setelah kelemahan serius ditemukan di dalamnya; versi tetap diterbitkan dengan nama SHA-1 (versi lemahnya dikenal dengan bahasa SHA-0). Empat fungsi baru SHA ditambahkan ke keluarga nanti (SHA-224, SHA-256, SHA-384 dan SHA-512: yang secara kolektif dikenal sebagai 'SHA-2').

Fungsi hash tidak memiliki kunci. Fungsi hash adalah algoritma yang dapat dieksekusi yang merupakan kode murni. Ada satu SHA-1 dan semua orang menggunakan yang sama.

Fungsi hash "hanya" membuat kekacauan besar pada data input, yang tidak dimaksudkan untuk diurai. Sebenarnya, ini dimaksudkan agar tahan terhadap penguraian. Meskipun semua orang tahu semua yang harus diketahui tentang fungsi hash (tidak ada kunci, hanya kode, dan tidak ada yang dirahasiakan), itu tetap menjadi "terlalu sulit" untuk menghitung ulang pesan input yang cocok, mengingat output fungsi hash. Bahkan tidak mungkin untuk menemukan dua pesan input berbeda yang, ketika diberikan ke fungsi hash, menghasilkan output yang sama; there must ada pasangan pesan seperti itu - disebut collisions - karena output fungsi hash memiliki ukuran tetap yang kecil, sedangkan input yang diterima dapat jauh lebih besar, jadi ada lebih banyak input yang mungkin daripada output yang mungkin. Ini adalah kepastian matematika bahwa tabrakan ada untuk setiap fungsi hash, tetapi sebenarnya menemukan satu adalah masalah lain.

Fungsi hash, seperti itu sendiri, tidak melakukan sesuatu yang bernilai tinggi langsung, tetapi merupakan blok bangunan yang sangat penting untuk algoritma lainnya. Misalnya, mereka digunakan dengan tanda tangan digital . Tanda tangan digital "membuktikan" tindakan sadar dari penandatangan yang ditunjuk atas sepotong data; seperti enkripsi asimetris, ini melibatkan pasangan kunci dan matematika, dan kendala terkait pada data yang ditandatangani. Fungsi hash h sedemikian sehingga penandatanganan h (m) sama baiknya dengan penandatanganan m sendiri: karena itu adalah tidak layak untuk menemukan dua pesan berbeda yang hash dengan nilai yang sama, persetujuan dari hasil hash cukup baik. Intinya adalah bahwa output dari fungsi hash cukup kecil untuk dapat digunakan dengan matematika yang disembunyikan dalam algoritma tanda tangan, bahkan jika pesan itu sendiri besar (SHA-1 dapat memproses gigabytes data , dan menghasilkan output 20-byte).

Dapat dicatat bahwa beberapa varian terbaru RSA-the-enkripsi-algoritma (dengan 'OAEP padding' dari PKCS # 1 v2.0) secara internal menggunakan fungsi hash. Fungsi hash adalah "pengacak" yang baik (output dari fungsi hash tidak memperlihatkan struktur yang dapat dikenali) dan ini membuatnya sesuai untuk membangun algoritma kriptografi yang lebih rumit dengan fitur keamanan yang baik.


Dalam SSL/TLS (HTTPS hanyalah HTTP-dalam-a-SSL/TLS-tunnel), fungsi hash digunakan untuk beberapa hal:

  • sebagai bagian dari enkripsi asimetris dan/atau tanda tangan digital;
  • sebagai bagian dari HMAC untuk memungkinkan klien dan server memverifikasi bahwa data yang dipertukarkan belum diubah dalam perjalanan;
  • sebagai bata bangunan untuk Fungsi Penurunan Kunci , yang "memperluas" kunci sesi yang diberikan ke beberapa kunci simetris yang digunakan untuk enkripsi simetris dan pemeriksaan integritas di kedua arah terowongan.

KDF bergantung pada "pengacakan" dan non-invertibilitas fungsi hash. Dalam SSL/TLS hingga TLS 1.1, KDF dibangun di atas dua fungsi hash, MD5 dan SHA-1, dalam upaya untuk membuatnya kuat meskipun kelemahan kemudian ditemukan di MD5 atau SHA-1. Ternyata kelemahan ditemukan di keduanya, tapi itu tidak memungkinkan jeda pada KDF seperti yang digunakan dalam SSL/TLS. Namun demikian, TLS 1.2 beralih ke KDF lain yang menggunakan fungsi hash tunggal yang dapat dikonfigurasi, biasanya SHA-256, yang saat ini tidak ada kelemahan yang diketahui.

51
Thomas Pornin

SHA tidak digunakan di RSA.

Namun, protokol kriptografi seperti SSL, SSH dan lainnya, menggunakan algoritma yang berbeda seperti SHA dan RSA untuk tujuan yang berbeda. SSL menggunakan RSA (enkripsi) atau DH (dengan tanda tangan RSA, DSA atau ECDSA) untuk kunci negosiasi dan AES atau 3DES untuk enkripsi data. Dalam protokol/format file PGP, RSA, DSA dan ElGamal digunakan untuk menandatangani dan mengenkripsi.

4
chris

Seperti yang Anda perhatikan, mereka adalah dua hal yang berbeda. Hash (SHA) adalah untuk memastikan integritas data dan enkripsi (RSA) adalah untuk kerahasiaan data. Mereka digunakan bersama-sama untuk memastikan data tidak marah dan hanya pihak yang tepat yang bisa membacanya.

HTTPS adalah bentuk PKI, yang menyediakan integritas, kerahasiaan, otentikasi. SHA atau MD5 hanyalah dua algoritma hashing yang berbeda yang digunakan untuk memastikan integritas koneksi https.

0
breakingigloo

Tentu saja mungkin bahwa SHA digunakan untuk membangun PRNG (pseudo random number generator) untuk menghasilkan kunci RSA. Tetapi dimungkinkan untuk menggunakan primitif crypto lainnya (mis. AES) juga. Untuk ini PRNG ada spesifikasi khusus (NIS SP 800-90, ANSI X9.31). RSA "murni" tidak tidak peduli bagaimana kunci dihasilkan, tetapi untuk menerapkan RSA dalam aplikasi dunia nyata kita harus yakin bahwa kunci yang dihasilkan harus dihasilkan oleh proses acak yang sebenarnya (atau tampaknya dihasilkan oleh). Jika tidak maka untuk penyerang mudah untuk tebak apa kuncinya (Jika keays tidak acak maka penyerang dapat menghitung juga).

0
user536

RSA adalah algoritma kriptografi asimetris, ini digunakan untuk mengirim informasi ke pihak tertentu tanpa Anda sendiri dapat mendekripsi lagi. Tetapi masih bisa didekripsi oleh orang lain. Algoritma ini sangat lambat, dan hanya ingin digunakan pada sejumlah kecil data.

SHA adalah seperangkat algoritma hashing kriptografi, ini adalah representasi yang lebih kecil dari blok besar data, untuk keperluan kriptografi kami ingin ini memenuhi persyaratan bahwa tidak mungkin untuk menemukan satu set data sehingga cocok dengan hash yang diberikan (dalam Dengan kata lain Anda tidak bisa beralih dari hash ke data yang menghasilkan hash itu (apakah data yang sama atau tidak).

Akhirnya ada algoritma seperti AES yang digunakan dalam kriptografi simetris di mana kedua belah pihak memiliki kunci yang sama dan dapat mengenkripsi dan mendekripsi dengan kunci yang sama.

Pada dasarnya kami menggabungkan hal-hal yang berbeda ini dengan cara yang berbeda: Jadi kami akan menggunakan RSA untuk mengirim dan menyetujui serangkaian kunci simetris (AES) (hanya untuk satu sesi), dengan cara ini tidak ada orang lain yang dapat mendekripsi data kami tetapi yang lain orang karena mereka tidak bisa mendapatkan kunci simetris dan kami tidak melakukan kriptografi asimetris lambat pada semua data tetapi hanya kunci enkripsi simetris yang relatif kecil.

Hashing biasanya digunakan dalam sistem seperti itu dengan cara berikut, kami ingin memeriksa data apakah itu berasal dari orang lain, jadi dia mendekripsi teks biasa dengan kunci privatnya, jika kita mengenkripsi teks sandi ini kita harus mendapatkan data kembali ( pada dasarnya menganggap enkripsi sebagai kebalikan dari dekripsi dan ini tiba-tiba masuk akal!), namun seperti yang saya katakan sebelumnya, kriptografi asimetris lambat. Jadi, mengapa tidak melakukan hash data dan menandatangani hash dengan cara ini kita dapat memverifikasi integritas data tanpa seseorang dapat membuat data yang tampaknya cocok.

0
ewanm89