it-swarm-id.com

Apa arti "kunci dengan panjang x bit"?

Saya ingin tahu apa artinya mengatakan "cryptosystem C menggunakan kunci dengan panjang x bit". Saya tidak mengerti apa arti panjang bit ... bukankah itu tergantung pada penyandian? Word yang sama mengkodekan ke bit string dengan panjang berbeda di utf8, iso dan unicode, jadi apakah ada pengkodean umum yang digunakan untuk mendefinisikan panjang kunci? Atau apakah "panjang x bit" berarti sesuatu yang sama sekali berbeda?

22
strauberry

Untuk algoritma simetris ( enkripsi simetris , Kode Otentikasi Pesan ), kunci adalah urutan dari bit, sedemikian rupa sehingga setiap urutan dengan panjang yang benar adalah kunci yang memungkinkan. Sebagai contoh, AES adalah algoritma enkripsi simetris (khususnya, blok cipher ) yang didefinisikan pada tombol 128, 192 dan 256 bit: urutan apa pun dari 128, 192 atau 256 bit dapat digunakan sebagai kunci. Bagaimana Anda menyandikan bit ini tidak relevan di sini: terlepas dari apakah Anda hanya membuangnya mentah (8 bit per byte), atau menggunakan Base64, atau heksadesimal, atau menyimpulkannya dari string karakter, atau apa pun, terserah Anda.

Ada beberapa gotcha dengan beberapa algoritma. Contoh utama adalah DES , pendahulu AES. DES is defined untuk menggunakan kunci 64-bit. Namun, jika Anda melihat definisi algoritma, Anda melihat bahwa hanya 56 bit ini yang digunakan; 8 lainnya diabaikan (jika Anda menghitung bit dari 1 hingga 64, ini adalah bit 8, 16, 24, 32, 40, 48, 56, dan 64; semuanya dianggap "bit paritas" tergantung pada 56 lainnya, tetapi tidak ada yang benar-benar mengganggu pengaturan atau memeriksa mereka). Jadi sering dikatakan bahwa DES memiliki kunci 56-bit. Ini karena panjang kunci terkait dengan keamanan: jika suatu algoritma menerima kunci dengan panjang n bit, maka ada 2n kemungkinan kunci, dan dengan demikian mencoba semuanya (serangan yang dikenal sebagai "pencarian lengkap" atau "brute force") memiliki waktu yang proporsional dengan 2n (dengan n cukup besar, yaitu lebih dari sekitar 85, ini tidak layak secara teknologi). Dalam arti itu, DES menawarkan keamanan kunci 56-bit ( 256 "benar-benar berbeda" kunci yang mungkin). Namun, jika Anda menggunakan pustaka yang mengimplementasikan DES, pustaka itu akan mengharapkan kunci DES sebagai urutan 64 bit (sering kali disediakan sebagai 8 byte).

Algoritma lain dengan aturan khusus adalah RC2 . Ia menerima kunci dengan panjang 8 hingga 128 bit (kelipatan hanya 8); tetapi juga memiliki parameter tambahan yang disebut panjang kunci efektif dilambangkan dengan "T1". Di tengah pemrosesan kunci, nilai internal "direduksi" menjadi urutan bit T1, yang berarti bahwa enkripsi selanjutnya hanya akan bergantung pada nilai bit spesifik T1 dalam nilai internal itu. Resistensi RC2 terhadap pencarian lengkap kemudian tidak lebih dari yang ditawarkan oleh kunci T1-bit, karena orang dapat mencoba semua kemungkinan urutan bit T1 untuk nilai internal itu. Namun, RC2 masih memiliki panjang kunci aktual (panjang urutan bit yang disediakan sebagai kunci) yang bisa lebih besar dari T1.

Untuk algoritma asimetris (juga dikenal sebagai kriptografi kunci publik , mencakup enkripsi asimetris, tanda tangan digital, beberapa protokol pertukaran kunci, dan beberapa algoritma esoteris lainnya), kunci bekerja dengan pasangan yang terdiri dari kunci publik dan kunci pribadi. Kunci-kunci ini adalah objek matematika dengan beberapa struktur internal yang berat. "Panjang kunci" kemudian merupakan ukuran konvensional dari ukuran salah satu objek matematika yang terlibat.

Misalnya, kunci publik RSA berisi bilangan bulat besar yang disebut modulus, serta bilangan bulat lainnya (biasanya kecil) yang disebut eksponen publik. Ketika kita mengatakan "kunci RSA 1024-bit", berarti modulusnya memiliki panjang 1024 bit, mis. Adalah bilangan bulat yang lebih besar dari 21023 tetapi lebih rendah dari 21024. Bilangan bulat seperti itu dapat dikodekan sebagai urutan 1024 bit, yaitu 128 byte. Namun, kunci publik juga harus mengandung eksponen publik, sehingga panjang yang dikodekan sebenarnya akan lebih besar. Dan kunci privat, pada sudut pandang teoretis, pengetahuan tentang bagaimana modulus dapat diperhitungkan dalam bilangan prima; pengkodean tradisional untuk pengetahuan itu adalah faktor prima, bersama dengan sekelompok nilai pembantu yang dapat dihitung ulang dari faktor-faktor (tetapi itu akan sedikit mahal) dan dapat membantu dalam mengeksekusi algoritma lebih cepat.

Untuk tipe kunci berbeda yang bekerja di atas matematika yang berbeda, "panjang" lainnya digunakan, sehingga Anda tidak dapat secara langsung membandingkan keamanan algoritma dengan hanya membandingkan panjang kunci. 256-bit ECDSA kunci jauh lebih aman daripada kunci RSA 768-bit. Juga, struktur matematika yang melekat pada pasangan kunci publik/pribadi memungkinkan untuk serangan yang jauh lebih cepat daripada hanya mencoba banyak bit acak, dan ada banyak detail halus. Lihat situs ini untuk penjelasan dan kalkulator online untuk berbagai rangkaian aturan tentang membandingkan ukuran kunci yang telah dibuat oleh banyak organisasi pengatur.

23
Thomas Pornin

Pertimbangkan enkripsi sederhana untuk menggeser setiap huruf satu ke kanan dalam alfabet, sehingga A menjadi B, B menjadi C, dan sebagainya. Sehingga: HELLO menjadi terenkripsi sebagai: IFMMP

Saya dapat menggeser satu huruf ke kanan, dua huruf ke kanan, atau hingga 25 huruf ke kanan. Anggap "jumlah huruf ke kanan" sebagai "kunci". Dibutuhkan 5 gigitan untuk menampung angka antara 0 dan 25. Oleh karena itu, ukuran kuncinya adalah "5 bit".

Atau, alih-alih bergeser ke kanan, misalkan kita memesan ulang secara acak alfabet, dan melakukan pemetaan satu-ke-satu: ABCDEFGHIJKLMNOPQRSTUVWXYZ RJQFGSKPBTODUZLNHYAVXEMWIC Dalam kasus ini, kita mencari huruf 'H' di tabel, lihat bahwa itu ditransformasikan menjadi huruf 'P', dan bahwa pesan: HELLO menjadi: PGDDL

Katakanlah bahwa penyusunan ulang acak alfabet dilakukan dengan urutan matematis berdasarkan angka 5 bit, sehingga setiap angka menghasilkan urutan yang berbeda. Dengan demikian, angka 5-bit sekali lagi adalah "kunci".

Masalah dengan kunci 5 bit adalah hanya memiliki 32 kombinasi. Jika saya tahu algoritma enkripsi, saya bisa 32 kunci semuanya sampai saya menemukan kombinasi yang tepat. Semakin besar kuncinya, semakin sulit ini menjadi - EKSPONENSI. Kunci 6 bit memiliki 64 kombinasi, kunci 7 bit memiliki 128 kombinasi, dan sebagainya. Kunci 10 bit memiliki seribu kombinasi, kunci 20 bit memiliki sejuta kombinasi, kunci 30 bit memiliki kombinasi MILIAR.

Katakanlah Anda memiliki komputer yang dapat menguji satu miliar kunci per detik, mencoba memaksa semua kombinasi. Itu berarti Anda dapat memecahkan kunci 30 bit hanya dalam satu detik. Tapi, itu berarti Anda akan membutuhkan satu miliar detik (atau 34 tahun) untuk memecahkan kunci 60 bit.

Setiap 30 bit yang kami tambahkan membuatnya satu miliar kali lebih sulit. Agensi mata-mata seperti NSA dapat memecahkan kunci 60 bit menggunakan superkomputer, tetapi kunci 90 bit adalah satu miliar kali lebih sulit untuk diretas, dan kunci 120 bit akan menjadi lebih jauh miliar kali lebih sulit lagi untuk memecahkan dari kunci 90 bit.

Itulah mengapa WEP yang lebih lama (40 bit) dan DES (56 bit) dianggap usang: kita dapat memecahkannya dengan komputer desktop dengan mencoba semua kombinasi. Itu sebabnya kripto modern, seperti AES, menggunakan 128 Kita tidak bisa dengan kasar memaksa crack algoritma tersebut.

14

Panjang kunci dalam bit tidak lebih dari spesifikasi ukurannya. Kunci 128 bit membutuhkan ruang 16 byte - hanya bit mentah yang digunakan prosesor. Tidak ada yang istimewa, tidak ada terjemahan.

Pengkodean adalah pemetaan bit ke sesuatu yang memiliki makna. Sebagai contoh, urutan 8 bit 01100001 (0x61) dalam ASCII adalah huruf "a". Karena kunci adalah data acak dan tidak ada artinya, penyandian hanya berperan untuk menerjemahkan data biner ke dalam sesuatu yang dapat dicetak, misalnya BASE64.Jadi, alih-alih "urutan bit apa yang harus saya tulis huruf a?" - yang dapat bervariasi dengan pengkodean yang berbeda, kuncinya adalah "apa ini? Apa ini? Apa yang ini? Apa yang ini ? ".

3
Jeff Ferland

Word yang sama mengkodekan ke bit string dengan panjang berbeda di utf8, iso dan unicode, jadi apakah ada pengkodean umum yang digunakan untuk mendefinisikan panjang kunci?

Kunci bukan kata. Ini adalah urutan bit. "Pengkodean umum" yang Anda gunakan adalah pengodean.

Pada catatan lain, ada penyandian kode-titik-> string yang disebut UTF-8 dan ISO- *, tetapi unicode bukan penyandian. Ini adalah set karakter.

Mungkin mendefinisikan beberapa istilah mungkin membantu.

"Kumpulan karakter", misalnya unicode, adalah serangkaian simbol yang biasanya diidentifikasi oleh indeks integer. Dalam unicode, simbol-simbol tersebut juga disebut titik kode (nilai skalar unicode ketat).

"String" adalah urutan simbol yang dipilih dari alfabet. Kecuali ditentukan lain, urutannya adalah dari panjang terbatas dan alfabet adalah bagian dari unicode tetapi istilah ini juga dapat digunakan untuk huruf lain: "byte string" (di mana alfabet adalah himpunan bilangan bulat yang dapat direpresentasikan dalam 8 bit [0,255] atau [-128.127]) atau "string UTF-16" (di mana alfabet adalah himpunan bilangan bulat [0,65535]).

"Pengkodean" adalah pemetaan (biasanya reversibel) dari satu jenis string ke yang lainnya. UTF-8 memetakan urutan "kode-titik" (alias string reguler) ke byte string.

1
Mike Samuel

Saya tidak mengerti apa arti panjang bit ... bukankah itu tergantung pada penyandian?

Teks - urutan karakter dan mesin terbang lain dari berbagai bahasa - adalah abstraksi. Manusia tahu bagaimana berurusan dengan teks, tetapi komputer tidak - sampai kita membuat cara bagi komputer untuk melakukannya. Cara itu disebut "encoding" - encoding adalah cara untuk memetakan urutan karakter ke urutan byte dan untuk memetakan urutan byte kembali ke urutan karakter. Dalam satu pengkodean, karakter dapat dikodekan menjadi satu byte, sedangkan dalam pengkodean lainnya, karakter yang sama akan dikodekan menjadi empat byte.

Sederhananya, teks bisa disandikan ke dalam urutan byte. Teksnya abstrak, dan harus disandikan untuk ditangani.

Tetapi urutan byte hanyalah urutan byte, dan tidak ada hubungannya dengan teks, dan tidak punya konsep pengkodean sama sekali.

Urutan bit, sepanjang panjangnya selalu kelipatan 8 bit, setara dengan urutan byte. Jadi ketika seseorang berbicara tentang kunci 16-byte, itu setara dengan kunci 128-bit.

Ketika berhadapan dengan fungsi kriptografi, seseorang harus selal berhati-hati untuk berurusan dengan urutan bit atau byte saja. Jika seseorang memiliki teks yang ingin dienkripsi atau hash, ia pertama-tama harus berhati-hati untuk menyandikan teks menjadi urutan byte, baik menggunakan pengkodean yang sama dalam semua kasus atau mencatat pengkodean yang digunakan dalam kasus ini. Orang hanya harus mengenkripsi atau mem-bytes, tidak pernah teks: dan penyandian adalah bagaimana menerjemahkan teks ke dalam byte Demikian juga, jika seseorang memiliki kunci yang diwakili dalam pengkodean teks hex atau base64, orang harus berhati-hati terlebih dahulu untuk memecahkan kode kunci kembali menjadi byte.

1
yfeldblum

Arti sebenarnya dari itu adalah berapa banyak bit yang akan membentuk kunci yang diinginkan untuk melanjutkan dengan algoritma enkripsi atau dekripsi. Misalkan ukuran kunci adalah 256 bit yang berarti bahwa, jika Anda mengambil bilangan bulat yang lebih besar dari 2 ^ 255 dan lebih rendah dari 2 ^ 256. Di antara bilangan bulat Anda harus menganggapnya sebagai kunci publik atau pribadi.

0
seshu babu