"Cryptosystem C, x bit uzunluğunda anahtarlar kullanıyor" demenin ne anlama geldiğini bilmek istiyorum. Bit uzunluğunun ne anlama geldiğini anlamıyorum ... kodlamaya bağlı değil mi? Aynı Word utf8, iso ve unicode farklı uzunluklarda bit dizeleri kodlar, bu yüzden bir anahtarın uzunluğunu tanımlamak için kullanılan genel bir kodlama var mı? Yoksa "x bit uzunluğu" tamamen farklı bir şey mi demek?
simetrik algoritmalar ( simetrik şifreleme , Mesaj Kimlik Doğrulama Kod ) için anahtar, Doğru uzunlukta herhangi bir sekans olası bir anahtar olacak şekilde bitler. Örneğin, AES , 128, 192 ve üzerindeki tuşlar üzerinden tanımlanan simetrik bir şifreleme algoritmasıdır (özellikle bir blok şifreleme ). 256 bit: 128, 192 veya 256 bitlik herhangi bir dizi anahtar olarak kullanılabilir. Bu bitleri nasıl kodladığınız burada alakalı değildir: sadece ham (bayt başına 8 bit) veya Base64 veya onaltılık kullanıp kullanmadığınıza veya bir karakter dizesinden çıkıp çıkmadığınızdan bağımsız olarak veya size bağlı olup olmadığına bakılmaksızın.
Bazı algoritmaları olan birkaç tane var. Bunun en iyi örneği AES'in öncülü olan DES . DES 64 bit anahtar kullanmak için tanımlanmıştır . Ancak, algoritma tanımına bakarsanız, bu bitlerin yalnızca 56'sının diğer 8 basitçe yok sayılır (1'den 64'e kadar bitleri numaralandırırsanız, bunlar 8, 16, 24, 32, 40, 48, 56 ve 64 bitleridir; bunlara bağlı olarak "parite bitleri" olması gerekir 56 kişi daha, ancak kimse onları ayarlama veya kontrol etme konusunda gerçekten rahatsız etmiyor) Bu nedenle genellikle DES bir 56 bitlik anahtar olduğu söylenir. anahtar uzunluğunun güvenlikle ilgili olmasından kaynaklanır: eğer bir algoritma n bitlik anahtarları kabul ederse, 2 vardırn olası anahtarlar ve böylece hepsini denemek ("kapsamlı arama" veya "kaba kuvvet" olarak bilinen saldırı) ile orantılıdır 2n ( n yeterince büyük, yani yaklaşık 85'ten fazla, bu teknolojik olarak mümkün değildir). Bu anlamda DES 56 bit anahtarın güvenliğini sunar ( 256 "gerçekten farklı" olası anahtarlar). Ancak, DES uygulayan bir kütüphane kullanırsanız, o kütüphane DES anahtarları 64 bitlik diziler olarak bekler (genellikle 8 bayt olarak sağlanır).
Özel bir kurala sahip başka bir algoritma RC2 . 8 ila 128 bit uzunluğundaki anahtarları kabul eder (sadece 8'in katları); ancak "T1" ile belirtilen etkili anahtar uzunluğu adında ekstra bir parametreye sahiptir. Anahtarın işlenmesinin ortasında, bir iç değer bir T1 bit dizisine "indirgenir", bu da sonraki şifrelemenin sadece bu iç değerdeki T1'e özgü bitlerin değerlerine bağlı olacağı anlamına gelir. RC2'nin kapsamlı aramaya karşı direnci o zaman bir T1 bit anahtarı tarafından sunulandan daha fazla değildir, çünkü kişi bu dahili değer için tüm olası T1 bit dizilerini deneyebilir. Bununla birlikte, RC2 hala T1'den daha büyük olabilen gerçek bir anahtar uzunluğuna (anahtar olarak sağlanan bit dizisinin uzunluğu) sahiptir.
asimetrik algoritmalar ( genel anahtar şifrelemesi olarak da bilinir, asimetrik şifreleme, dijital imzalar, bazı anahtar değişim protokolleri ve birkaç ezoterik algoritma), anahtarlar çiftler tarafından ortak anahtar ve özel anahtardan oluşur. Bu tuşlar, bazı ağır iç yapıya sahip matematiksel nesnelerdir. "Anahtar uzunluk" daha sonra ilgili matematik nesnelerinden birinin büyüklüğünün geleneksel bir ölçüsüdür.
Örneğin, bir RSA ortak anahtarı, modülü olarak adlandırılan büyük bir tamsayı ve genel üs olarak adlandırılan başka bir tam sayı (genellikle küçük) içerir . Bir "1024 bit RSA anahtarı" dediğimizde, modülün 1024 bit uzunluğuna sahip olduğunu, yani 2'den büyük bir tam sayı olduğunu kastediyoruz.1023 ancak 2'den düşük1024. Böyle bir tam sayı 1024 bitlik bir dizi, yani 128 bayt olarak kodlanabilir. Yine de, ortak anahtar genel üssü de içermelidir, bu nedenle gerçek kodlanmış uzunluk daha büyük olacaktır. Ve özel anahtar, teorik bir bakış açısıyla, modülün asal sayılarda nasıl faktörleştirilebileceğinin bilgisidir; bu bilgi için geleneksel kodlama, faktörlerden yeniden hesaplanabilen (ancak biraz pahalı olacak) ve algoritmanın daha hızlı yürütülmesine yardımcı olabilecek bir grup yardımcı değerle birlikte asal faktörlerin kodlamasıdır.
Farklı matematik üzerinde çalışan farklı anahtar türleri için, diğer "uzunluklar" kullanılır, böylece sadece anahtar uzunluklarını karşılaştırarak algoritmaların güvenliğini doğrudan karşılaştıramazsınız. 256-bit ECDSA anahtarı, 768 bit RSA anahtarından çok daha güvenlidir. Ayrıca, genel/özel anahtar çiftlerine özgü matematiksel yapı, sadece rastgele bitleri denemekten çok daha hızlı saldırılara izin verir ve birçok ince ayrıntı vardır. Birçok düzenleyici kurumun ortaya çıkardığı anahtar boyutları karşılaştırmayla ilgili çeşitli kurallar kümesi için açıklamalar ve çevrimiçi hesap makineleri için bu site konusuna bakın.
Alfabedeki her harfi bir sağa kaydırmanın basit şifrelemesini düşünün, böylece A B olur, B C olur, vb. Böylece: HELLO şu şekilde şifrelenir: IFMMP
Bir harfi sağa, iki harfi sağa veya 25 harfe kadar sağa kaydırabilirim. "Sağdaki harf sayısını" "anahtar" olarak düşünün. 0 ile 25 arasında bir sayı tutmak 5 bit sürer. Bu nedenle anahtar boyutu "5 bit" tir.
Veya sağa kaydırmak yerine, alfabeyi rastgele yeniden sipariş ettiğimizi ve bire bir eşleme yaptığımızı varsayalım: ABCDEFGHIJKLMNOPQRSTUVWXYZ RJQFGSKPBTODUZLNHYAVXEMWIC Bu durumda, tablodaki 'H' harfine bakıyoruz, bakın 'P' harfine dönüştürülür ve HELLO olur: PGDDL
Diyelim ki, alfabenin rastgele yeniden sıralaması, 5 bitlik bir sayıya dayanan bir matematik sekansı ile yapılıyor, böylece her sayı farklı bir sekans üretiyor. Böylece, 5-bit sayı yine "anahtar" dır.
5 bit anahtar ile ilgili sorun, sadece 32 kombinasyona sahip olmasıdır. Şifreleme algoritmasını bilirsem, doğru kombinasyonu bulana kadar 32 tuşun hepsini kullanabilirim. Anahtar ne kadar büyük olursa, o kadar zorlaşır - GENİŞ OLARAK. 6 bitlik anahtarın 64 kombinasyonu vardır, 7 bitlik anahtarın 128 kombinasyonu vardır vb. 10 bitlik anahtarın bin kombinasyonu vardır, 20 bitlik anahtarın milyon kombinasyonu vardır, 30 bitlik anahtarın MİLYAR kombinasyonları vardır.
Diyelim ki tüm kombinasyonları zorlamaya çalışırken saniyede milyar anahtar test edebilen bir bilgisayarınız var. Bu, 30 bitlik bir anahtarı yalnızca bir saniyede kırabileceğiniz anlamına gelir. Ancak bu, 60 bitlik bir anahtarı kırmanızın bir milyar saniye (veya 34 yıl) alacağı anlamına gelir.
Eklediğimiz her 30 bitte bir milyar kat daha zor. NSA gibi bir casus ajansı süper bilgisayarlar kullanarak 60 bitlik anahtarları kırabilir, ancak 90 bitlik bir anahtarın kırılması milyarlarca kat daha zor ve 120 bitlik bir anahtarın milyarlarca kat daha zor olması gerekir 90 bitlik bir anahtardan daha fazla çatlamak.
Bu nedenle eski WEP (40 bit) ve DES (56 bit) eski sayılır: tüm kombinasyonları deneyerek masaüstü bilgisayarlarla onları parçalayabiliriz.Bu yüzden AES gibi modern kripto 128 kullanır Bu algoritmaları kırmaya zorlayamayız.
Bir anahtarın uzunluğu, boyutunun bir özelliğinden başka bir şey değildir. 128 bit anahtar 16 bayt yer kaplar - yalnızca işlemcinin kullandığı ham bitler. Özel bir şey yok, çeviri yok.
Bir kodlama, bitlerin anlamı olan bir şeyle eşleştirilmesidir. Örneğin, ASCII içindeki 8 bit 01100001 (0x61) dizisi "a" harfidir. Anahtarlar rasgele veriler olduğundan ve hiçbir anlamı olmadığından kodlama yalnızca ikili verileri çevirmek için devreye girer. yazdırılabilir bir şey, örneğin BASE64.Böylelikle, "a harfini yazmak için hangi bit dizisine ihtiyacım var?" yerine - farklı kodlamalara göre değişebilen bir anahtar, "bu bit nedir? bu bit nedir? bu bit nedir ?".
Aynı Word, utf8, iso ve unicode'da farklı uzunluklardaki bit dizelerini kodlar, bu nedenle bir anahtarın uzunluğunu tanımlamak için kullanılan genel bir kodlama var mı?
Anahtar kelime değildir. Bir bit dizisidir. Konuştuğunuz "genel kodlama", kodlama değildir.
Başka bir notta, UTF-8 ve ISO- * olarak adlandırılan kod noktası-> dize kodlamaları vardır, ancak unicode bir kodlama değildir. Bir karakter kümesidir.
Belki bazı terimleri tanımlamak yardımcı olabilir.
Bir "karakter kümesi", örneğin unicode, genellikle tamsayı dizini ile tanımlanan bir simgeler kümesidir. Unicode'da bu sembollere kod noktaları da denir (kesinlikle unicode skaler değerleri).
"Dize", bir alfabeden seçilen bir sembol dizisidir. Aksi belirtilmedikçe, dizi sonlu uzunluktadır ve alfabe bir unicode alt kümesidir, ancak terim diğer alfabe için de kullanılabilir: bir "bayt dizesi" (burada alfabe 8 bitte temsil edilebilen tamsayılar kümesidir [0,255] veya [-128,127]) veya "UTF-16 dizesi" (burada alfabe tamsayılar kümesidir [0,65535]).
"Kodlama", bir tür dizeden diğerine (genellikle tersinir) bir eşlemedir. UTF-8, "kod noktası" dizilerini (normal dizeler olarak da bilinir) bayt dizeleriyle eşler.
Bit uzunluğunun ne anlama geldiğini anlamıyorum ... kodlamaya bağlı değil mi?
Metin - birden çok dilden bir dizi karakter ve diğer glifler - bir soyutlamadır. İnsanlar metinle nasıl başa çıkacaklarını bilirler, ancak bilgisayarlar yapmazlar - bilgisayarların bunu yapması için bir yol oluşturana kadar. Bu şekilde "kodlama" olarak adlandırılır - kodlama, bir karakter dizisini bir bayt dizisine eşlemenin ve bir bayt dizisini bir karakter dizisine geri eşlemenin bir yoludur. Bir kodlamada, bir karakter bir bayta kodlanabilirken, başka bir kodlamada aynı karakter dört bayta kodlanacaktır.
Basitçe, metin bir bayt dizisine kodlanmış olabilir. Metin yine de soyuttur ve ele alınması için kodlanmış olması gerekir.
Ancak bir bayt dizisi sadece bir bayt dizisidir ve metinle hiçbir ilgisi yoktur ve herhangi bir kodlama kavramı yoktur.
Uzunlukları her zaman 8 bitin katları olduğu sürece bit dizileri bayt dizilerine eşdeğerdir. Birisi 16 baytlık bir anahtardan bahsettiğinde, 128 bitlik bir anahtarla eşdeğerdir.
Kriptografik fonksiyonlarla uğraşırken, her zaman sadece bit veya bayt dizileri ile ilgilenmeye dikkat etmelidir. Kişinin şifrelemek veya karma yapmak istediği metin varsa, önce metni her durumda aynı kodlamayı kullanarak veya bu durumda hangi kodlamanın kullanıldığını not ederek önce bir bayt dizisine kodlamaya dikkat etmelidir. Kişi sadece metinleri şifrelemeli veya hash baytları içermemelidir, asla metin: ve kodlamalar metnin bayta nasıl çevrileceğidir. Benzer şekilde, onaltılık veya base64 metin kodlamalarında temsil edilen bir anahtar varsa, önce anahtarı baytlara deşifre etmeye özen gösterilmelidir.
Bunun asıl anlamı, şifreleme veya şifre çözme algoritmalarıyla devam etmek için kaç bitin istenen anahtarı oluşturacağıdır. Anahtar boyutunun 256 bit olduğunu varsayalım, yani 2 ^ 255'ten büyük ve 2 ^ 256'dan küçük bir tam sayı alırsanız. Tamsayı arasında genel veya özel anahtar olarak almanız gerekir.