Yurtiçi veri şifreleme standardı. Yurtiçi veri şifreleme standardı GOST 28147 89'a göre kriptografik dönüşüm algoritması

Şifreleme algoritması GOST 28147-89, Intel x86 platformundaki bilgisayarlar için kullanımı ve yazılım uygulaması.


Andrey Vinokurov

Algoritmanın açıklaması.

Terimler ve atamalar.

Rusya Federasyonu'nun şifreleme standardının açıklaması, "GOST 28147-89 Kriptografik Dönüşüm Algoritması" başlıklı çok ilginç bir belgede yer almaktadır. "Şifreleme" terimi yerine kendi adına daha genel bir kavram görünmesi gerçeği " kriptografik dönüşüm "Hiç de tesadüfi değil. Doküman, birbiriyle yakından ilişkili birkaç şifreleme prosedürüne ek olarak, taklitler ... İkincisi, kriptografik bir kontrol kombinasyonundan başka bir şey değildir, yani, amaç için gizli bir anahtar kullanılarak orijinal verilerden üretilen bir koddur. imitoproteksiyon veya verilerinizi yetkisiz değişikliklerden koruyun.

GOST algoritmalarının farklı aşamalarında, üzerinde çalıştıkları veriler yorumlanır ve farklı şekillerde kullanılır. Bazı durumlarda, veri öğeleri bağımsız bit dizileri, diğer durumlarda işaretsiz tamsayı ve diğerlerinde birkaç basit öğeden oluşan bir yapıya sahip karmaşık bir öğe olarak ele alınır. Bu nedenle, karışıklığı önlemek için kullanılan semboller üzerinde anlaşmak gerekir.

Bu makaledeki veri öğeleri italik büyük harflerle belirtilmiştir (örneğin, X). Aracılığıyla | X| öğenin boyutunu gösterir X bitler halinde. Yani veri öğesini yorumlarsanız Xnegatif olmayan bir tamsayı olarak, aşağıdaki eşitsizliği yazabilirsiniz:.

Bir veri öğesi birkaç küçük maddeden oluşuyorsa, bu durum aşağıdaki şekilde belirtilir: X=(X 0 ,X 1 ,…,X n –1)=X 0 ||X 1 ||…||X n -1. Birkaç veri öğesini tek bir üründe birleştirme prosedürü denir birleştirme veriler ve "||" simgesiyle gösterilir. Doğal olarak, veri öğelerinin boyutları için aşağıdaki ilişki yerine getirilmelidir: | X|=|X 0 |+|X 1 |+…+|X n -1 |. Karmaşık veri öğelerini ve birleştirme işlemlerini belirtirken, kurucu veri öğeleri artan öncelik sırasına göre listelenir. Başka bir deyişle, bir bileşik öğeyi ve ona dahil olan tüm veri öğelerini işaretsiz tamsayılar olarak yorumlarsanız, aşağıdaki eşitliği yazabilirsiniz:

Algoritmada, bir veri öğesi, ayrı bitlerden oluşan bir dizi olarak yorumlanabilir, bu durumda, bitler, aşağıdaki örnekte gösterildiği gibi, diziyle aynı harfle, ancak küçük harfli bir versiyonda gösterilir:

X=(x 0 ,x 1 ,…,x n –1)=x 0 +2 1 x 1 +…+2 n-1 · x n –1 .

Böylece, dikkat ederseniz, sözde GOST kabul edildi. "Little-endian" bit numaralandırması, yani çok bitli veri sözcükleri içinde, tek tek bitler ve bunların düşük numaralı grupları daha az önemlidir. Bu, standardın 1.3 maddesinde doğrudan belirtilmiştir: "İkili vektörleri toplarken ve döngüsel kaydırırken, en önemli bitler, büyük sayılara sahip sürücülerin bitleridir." Ayrıca, standart 1.4, 2.1.1 ve diğerlerinin maddeleri, sanal şifreleme cihazının depolama kayıtlarını daha düşük olanlardan gelen verilerle doldurmaya başlamayı öngörür; daha az önemli rakamlar. Intel x86 mikroişlemci mimarisinde tam olarak aynı numaralandırma sırası benimsenmiştir, bu nedenle bu mimaride yazılımda şifre uygulandığında veri sözcükleri içinde ek bit permütasyonları gerekmemektedir.

Veri elemanları üzerinde mantıksal anlamı olan bir işlem yapılırsa, bu işlemin elemanların karşılık gelen bitleri üzerinde gerçekleştirildiği varsayılır. Diğer bir deyişle Bir B=(a 0 b 0 ,a 1 b 1 ,…,bir n –1 b n –1), nerede n=|Bir|=|B| ve "" simgesi rastgele bir ikili mantıksal işlemi belirtir; genellikle bir operasyonu ifade eder özel veya aynı zamanda toplama modülü 2'nin çalışmasıdır:

Şifre oluşturma mantığı ve GOST anahtar bilgi yapısı.

Orijinal GOST 28147–89'u dikkatlice incelerseniz, birkaç seviyedeki algoritmaların bir açıklamasını içerdiğini fark edeceksiniz. En üstte, veri dizilerini şifrelemek ve bunlar için bir taklit ek oluşturmak için tasarlanmış pratik algoritmalar vardır. Hepsi GOST metninde adı geçen üç alt düzey algoritmaya güveniyor döngüleri ... Bu temel algoritmalar bu makalede şu şekilde anılmaktadır: temel döngü onları diğer tüm döngülerden ayırmak için. Aşağıdaki isim ve tanımlara sahiptirler, ikincisi parantez içinde verilmiştir ve anlamları daha sonra açıklanacaktır:

  • şifreleme döngüsü (32-Ç);
  • şifre çözme döngüsü (32-P);
  • taklit kesici uç üretim döngüsü (16-З).

Buna karşılık, temel döngülerin her biri, bu çalışmada daha sonra kesinlik çağrısı yapılan tek bir prosedürün çoklu tekrarlarıdır. kripto dönüşümünün ana adımı .

Bu nedenle, GOST'u anlamak için aşağıdaki üç şeyi anlamanız gerekir:

  • ne ana adım kripto dönüşümleri;
  • temel döngülerin nasıl temel adımlardan oluştuğu;
  • üçten itibaren temel döngüler tüm pratik GOST algoritmaları eklendi.

Bu konuları incelemeye geçmeden önce, GOST algoritmaları tarafından kullanılan temel bilgiler hakkında konuşmalısınız. Kamuoyunun bildiği tüm modern şifrelerin sağladığı Kirchhoff ilkesine uygun olarak, şifreli mesajın gizliliğini sağlayan onun gizliliğidir. GOST'ta temel bilgiler iki veri yapısından oluşur. Gerçek dışında anahtar tüm şifreler için gereklidir, ayrıca ikame tablosu ... Aşağıda, temel GOST yapılarının temel özellikleri verilmiştir.

Kripto dönüşümünün ana adımı.

Bir kripto dönüşümünün ana adımı, esasen 64 bitlik bir veri bloğunun dönüşümünü tanımlayan bir operatördür. Bu operatörün ek bir parametresi, herhangi bir anahtar öğe olarak kullanılan 32 bitlik bir bloktur. Ana adım algoritması Şekil 1'de gösterilmektedir.


Şekil 1. GOST 28147-89 algoritmasının kripto dönüşümünün ana adımının diyagramı.

Aşağıda ana adım algoritması için açıklamalar bulunmaktadır:

Adım 0

  • N - dönüştürülmüş 64 bit veri bloğu, adımın yürütülmesi sırasında en az önemli olanıdır ( N 1) ve kıdemli ( N 2) parçalar ayrı ayrı 32 bitlik işaretsiz tamsayılar olarak ele alınır. Böylece kişi yazabilir N \u003d(N 1 ,N 2).
  • X - 32 bit anahtar öğe;

Aşama 1

Anahtar ekleme. Dönüştürülen bloğun alt yarısı, adımda kullanılan anahtar eleman ile modulo 2 32 eklenir, sonuç bir sonraki adıma geçirilir;

Adım 2

Blok değiştirme. Önceki adımda elde edilen 32 bitlik değer, sekiz adet 4 bitlik kod bloğu dizisi olarak yorumlanır: S \u003d(S 0 , S 1 , S 2 , S 3 , S 4 , S 5 , S 6 , S 7) ve S 0 en genç 4'ü içerir ve S 7 - 4 en önemli bit S.

Ayrıca, sekiz bloğun her birinin değeri, ikame tablosundan aşağıdaki gibi seçilen yenisiyle değiştirilir: blok değeri S ideğişiklikler S isırayla -th element (sıfırdan numaralandırma) benikame düğümü (yani ben-yer değiştirme tablosunun birinci satırı, ayrıca sıfırdan numaralandırma). Diğer bir deyişle, değiştirilen bloğun numarasına eşit bir satır numarasına ve 4 bitlik negatif olmayan bir tamsayı olarak değiştirilen bloğun değerine eşit bir sütun numarasına sahip ikame tablosundan bir eleman, blok değerinin ikame olarak seçilir. Bu nedenle, ikame tablosunun boyutu netleşir: içindeki satır sayısı, 32 bitlik bir veri bloğundaki 4 bitlik öğelerin sayısına eşittir, yani sekiz ve sütun sayısı, 2 4, on altı olduğu bilinen 4 bitlik bir veri bloğunun farklı değerlerinin sayısına eşittir.

Aşama 3

11 bit sola kaydırılır. Önceki adımın sonucu, döngüsel olarak 11 bit kadar en önemli bitlere kaydırılır ve bir sonraki adıma aktarılır. Algoritmanın diyagramında sembol, argümanının döngüsel kaymasının işlevini 11 bit sola, yani. daha yüksek rakamlara doğru.

4. adım

Bitsel toplama: 3. adımda elde edilen değer, dönüştürülen bloğun üst yarısına bitsel modulo 2 eklenir.

Adım 5

Zincir boyunca kayma: dönüştürülen bloğun alt kısmı eski olanın yerine kaydırılır ve önceki adımın sonucu yerine yerleştirilir.

6. Adım

Dönüştürülen bloğun sonuç değeri, kripto dönüşümünün ana adımının algoritmasının yürütülmesinin bir sonucu olarak döndürülür.

Kriptografik dönüşümlerin temel döngüleri.

Bu makalenin başında belirtildiği gibi, GOST, blok şifreleri sınıfına atıfta bulunur, yani içindeki bilgi işleme birimi bir veri bloğudur. Bu nedenle, kriptografik dönüşümler için, yani bir veri bloğunun kontrol kombinasyonunda şifreleme, şifre çözme ve "hesaplama" için algoritmalar tanımlamasını beklemek oldukça mantıklıdır. Bu algoritmalar denir temel döngüler Bu şifrenin inşası için temel önemlerini vurgulayan GOST.

Temel döngüler, ana adımlar önceki bölümde tartışılan kriptografik dönüşüm. Ana adım sırasında, yalnızca bir 32 bitlik anahtar öğe kullanılırken, GOST anahtarı bu tür sekiz öğe içerir. Bu nedenle, anahtarın tam olarak kullanılması için, temel döngülerin her biri, ana adımı çeşitli öğeleriyle tekrar tekrar yürütmelidir. Aynı zamanda, her temel döngüde, tüm anahtar öğelerin aynı sayıda kullanılması gerektiği oldukça doğal görünmektedir; şifreleme gücü nedeniyle bu sayı birden fazla olmalıdır.

Yukarıda basitçe sağduyuya dayalı olarak yapılan tüm varsayımların doğru olduğu ortaya çıktı. Temel döngüler, tekrarlanan yürütmeden oluşur ana adım farklı anahtar unsurları kullanmak ve birbirlerinden sadece adımın tekrar sayısı ve anahtar unsurların kullanıldığı sırada farklılık gösterir. Aşağıda farklı döngülerin sırası verilmiştir.

Şifreleme döngüsü 32-Z:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 .


Şekil 2a. Şifreleme döngüsü diyagramı 32-Z

Şifre çözme döngüsü 32-P:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 ,K 7 ,K 6 ,K 5 ,K 4 ,K 3 ,K 2 ,K 1 ,K 0 .


Şekil 2b. 32-P şifre çözme döngüsü diyagramı

Taklit kesici uç 16-З üretim döngüsü:

K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 ,K 0 ,K 1 ,K 2 ,K 3 ,K 4 ,K 5 ,K 6 ,K 7 .


Şekil 2c. Taklit ek 16-Ç'nin üretim döngüsünün şeması.

Döngülerin her biri, " n-X ", gösterimin ilk öğesi ( n), döngüdeki ana adımın tekrar sayısını ve notasyonun ikinci öğesini belirtir ( X), harf, anahtar öğelerin kullanımında şifreleme ("Z") veya şifre çözme ("P") sırasını belirtir. Bu siparişin ek açıklamaya ihtiyacı var:

Şifre çözme döngüsü, şifreleme döngüsünün tersi olmalıdır, yani, bu iki döngünün rastgele bir bloğa sıralı olarak uygulanması, aşağıdaki ilişki ile yansıtılan orijinal bloğa neden olmalıdır: C 32-P ( C 32-Z ( T))\u003d Tnerede T- keyfi 64 bit veri bloğu, C X ( T) - döngü yürütmenin sonucu X veri bloğunun üstünde T... GOST gibi algoritmalar için bu koşulu yerine getirmek için, karşılık gelen döngüler tarafından anahtar öğeleri kullanma sırasının karşılıklı olarak ters olması gerekli ve yeterlidir. 32-Ç ve 32-Р döngüleri için yukarıdaki dizileri karşılaştırarak, söz konusu durum için yazılı koşulun geçerliliğini doğrulamak kolaydır. Söylenenlerden ilginç bir sonuç çıkar: Bir döngünün başka bir döngüye ters olma özelliği karşılıklıdır, yani 32-Ç döngüsü 32-Р döngüsüne göre tersidir. Başka bir deyişle, veri bloğunun şifrelenmesi teorik olarak bir şifre çözme döngüsü ile gerçekleştirilebilir, bu durumda veri bloğunun şifresinin çözülmesi bir şifreleme döngüsü ile gerçekleştirilmelidir. İki karşılıklı ters döngüden herhangi biri şifreleme için kullanılabilir, ardından ikincisi verilerin şifresini çözmek için kullanılmalıdır, ancak GOST 28147-89 standardı döngülere rol atar ve kullanıcıya bu konuda seçim yapma hakkı vermez.

Taklit bir ek oluşturma döngüsü, şifreleme döngülerinden iki kat daha kısadır, içindeki anahtar öğeleri kullanma sırası, şifreleme döngüsünün ilk 16 adımındaki ile aynıdır, bu, yukarıdaki diziler dikkate alınarak doğrulanması kolaydır, bu nedenle döngü tanımlamasındaki bu sıra, aynı "Z" harfi ile kodlanır.

Temel döngü diyagramları Şekil 2a-c'de gösterilmektedir. Her biri bir argüman olarak alır ve sonuç olarak diyagramlarda belirtilen 64 bitlik bir veri bloğu döndürür. N... Adım sembolü ( N,X) veri bloğu için kripto dönüşümünün ana adımının yürütülmesini belirtir N anahtar unsur kullanmak X... Şifreleme ve yerleştirme taklidi döngüleri arasında, yukarıda bahsedilmeyen bir fark daha vardır: temel şifreleme döngülerinin sonunda, sonuç bloğunun üst ve alt kısımları tersine çevrilir, bu, karşılıklı tersine çevrilebilirlikleri için gereklidir.

Temel şifreleme modları.

GOST 28147-89, aşağıdaki üç veri şifreleme modunu sağlar:

  • basit değiştirme,
  • oyun
  • geribildirim ile oyun oynama,

ve simüle edilmiş bir ek oluşturmak için bir ek mod.

Bu modların herhangi birinde veri, kriptografik dönüşüme uğrayan dizinin bölündüğü 64 bitlik bloklar halinde işlenir, bu nedenle GOST, blok şifreleri ifade eder. Bununla birlikte, iki gama modunda, boyutu 8 bayttan daha küçük olan tamamlanmamış bir veri bloğunu işlemek mümkündür; bu, 8 baytın katı olmayabilen rasgele bir boyuta sahip veri dizilerini şifrelerken önemlidir.

Kriptografik dönüşümler için belirli algoritmaları değerlendirmeye geçmeden önce, aşağıdaki bölümlerde diyagramlarda kullanılan notasyonu netleştirmek gerekir:

T hakkında, T w - sırasıyla açık ve şifrelenmiş veri dizileri;

, – ben- Sırasıyla açık ve şifrelenmiş veri sırasına göre 64 bit bloklar: , , son blok eksik olabilir :;

n - veri dizisindeki 64 bitlik blokların sayısı;

C X - temel döngü "X" algoritmasına göre 64 bitlik bir veri bloğunu dönüştürme işlevi.

Şimdi ana şifreleme modlarını açıklayalım:

Kolay değiştirme.

Bu modda şifreleme, açık veri bloklarına 32-З döngüsü, şifre çözme - şifrelenmiş veri bloklarına 32-Р döngüsü uygulamaktan oluşur. Bu modların en basitidir, 64-bit veri blokları birbirinden bağımsız olarak işlenir. Basit değiştirme modundaki şifreleme ve şifre çözme algoritmalarının şemaları sırasıyla Şekil 3a ve b'de gösterilmektedir, bunlar önemsizdir ve herhangi bir yoruma ihtiyaç duymazlar.


Resim. 3 A. Kolay değiştirme modunda veri şifreleme algoritması


Resim. 3b. Basit değiştirme modunda veri şifre çözme algoritması

Sırasıyla şifreleme veya şifre çözme işlemine tabi olan açık veya şifrelenmiş veri dizisinin boyutu 64 bitin katı olmalıdır: | T o | \u003d | T w | \u003d 64 n işlem tamamlandıktan sonra alınan veri dizisinin boyutu değişmez.

Simple Swap şifreleme modu aşağıdaki özelliklere sahiptir:

  • Veri blokları birbirinden ve veri dizisindeki konumlarından bağımsız olarak şifrelendiğinden, iki özdeş düz metin bloğunun şifrelenmesi, aynı şifreli metin blokları ile sonuçlanır ve bunun tersi de geçerlidir. Belirtilen özellik, şifrelenmiş veri dizisinde aynı bloklarla karşılaşılırsa, bu ciddi bir şifre için kabul edilemez olan, kriptanalistin ilk verinin bloklarının kimliği hakkında bir sonuca varmasına izin verecektir.
  • Şifrelenmiş veri dizisinin uzunluğu 8 bayt veya 64 bitin katı değilse, dizideki son tamamlanmamış veri bloğunun tam 64 bit'e nasıl ve nasıl ekleneceği sorunu ortaya çıkar. Bu görev ilk bakışta göründüğü kadar kolay değil. "Tamamlanmamış bir bloğu sıfır bit ile desteklemek" veya daha genel olarak "eksik bir bloğu sıfır ve bir bitin sabit bir kombinasyonuyla tamamlamak" gibi açık çözümler, belirli koşullar altında bir kriptanaliste bu eksik bloğun içeriğini belirlemek için numaralandırma yöntemlerini kullanma yeteneği verebilir ve bu gerçek, güçte bir azalma anlamına gelir. şifre. Ek olarak, şifreli metnin uzunluğu değişecek ve 64 bitlik en yakın tam sayı katına çıkacaktır ki bu genellikle istenmeyen bir durumdur.

İlk bakışta, yukarıdaki özellikler basit değiştirme kipini kullanmayı neredeyse imkansız kılar, çünkü yalnızca 64 bitlik tekrar eden 64 bitlik bloklar içermeyen veri dizilerini şifrelemek için kullanılabilir. Görünüşe göre herhangi bir gerçek veri için bu koşulların yerine getirildiğini garanti etmek imkansızdır. Bu neredeyse böyledir, ancak çok önemli bir istisna vardır: anahtarın 32 bayt ve değiştirme tablosunun 64 bayt olduğunu unutmayın. Ek olarak, anahtarda veya değiştirme tablosunda tekrar eden 8 baytlık blokların varlığı, bunların çok düşük kalitesine işaret eder, bu nedenle gerçek anahtar öğelerde böyle bir tekrar olamaz. Bu nedenle, basit değiştirme modunun, özellikle diğer modlar bu amaç için daha az uygun olduğundan, ek bir senkronizasyon veri öğesi - senkronizasyon mesajı gerektirdiğinden, anahtar bilgisini şifrelemek için oldukça uygun olduğunu bulduk (sonraki bölüme bakın). Tahminimiz doğru, GOST, yalnızca anahtar verilerini şifrelemek için basit değiştirme modunu kullanmayı öngörüyor.

Sakızlanma.

Easy Swap modunun eksikliklerinden nasıl kurtulabilirsiniz? Bunu yapmak için 64 bitten küçük blokları şifrelemeyi mümkün kılmak ve şifreli metin bloğunun numarasına bağlı olmasını sağlamak, başka bir deyişle, rasgele dağıtmak şifreleme işlemi. GOST'de bu, iki şifreleme modunda iki farklı şekilde elde edilir. oyun . Gumming - bu, şifrelenmiş (açık) verileri elde etmek için belirli bir kriptografik algoritma kullanılarak oluşturulan bir dizi veri öğesi olan açık (şifrelenmiş) verilere bir kriptografik gamın dayatılmasıdır (kaldırılması). Şifreleme sırasında bir gamanın yerleştirilmesi ve şifre çözme sırasında kaldırılması için karşılıklı olarak ters ikili işlemler kullanılmalıdır, örneğin 64-bit veri blokları için toplama ve çıkarma modülo 64. GOST'te, bu amaçla, kendisinin tersi olduğu ve ayrıca en kolay şekilde donanımda uygulandığı için bitsel toplama modulo 2'nin çalışması kullanılır. Gama, yukarıdaki sorunların her ikisini de çözer: ilk olarak, tüm gama öğeleri gerçek şifrelenmiş diziler için farklıdır ve bu nedenle, bir veri dizisindeki iki özdeş bloğun şifrelenmesinin sonucu farklı olacaktır. İkinci olarak, gamma elemanları 64 bitlik eşit kısımlarda üretilse de, bu tür bir bloğun şifrelenmiş bloğun boyutuna eşit bir boyuta sahip bir kısmı kullanılabilir.

Şimdi doğrudan gama modunun açıklamasına gidelim. Bu mod için gama şu şekilde elde edilir: 64-bit veri blokları, daha sonra 32-Z döngü dönüşümüne, yani basit değiştirme modunda şifrelemeye tabi tutularak gama blokları ile sonuçlanan bazı algoritmik tekrar eden sayı dizisi üreteci (RNG) kullanılarak oluşturulur. Gamanın yerleştirilmesi ve kaldırılmasının aynı bitsel özel işlem kullanılarak gerçekleştirilmesi veya gama modunda şifreleme ve şifre çözme algoritmaları aynı olması nedeniyle, genel şemaları Şekil 4'te gösterilmektedir.

Gama oluşturmak için kullanılan RGPC, tekrarlayan bir işlevdir: - tekrarlayan bir dizinin öğeleri, f - dönüştürme işlevi. Bu nedenle, soru kaçınılmaz olarak onun başlatılmasıyla, yani elemanla ilgili olarak ortaya çıkmaktadır. Gerçekte, bu veri elemanı, gama modları için bir algoritma parametresidir, diyagramlarda Sve kriptografide denir synchro paketi ve GOST'umuzda - ilk doldurma şifreleme kayıtlarından biri. Belirli nedenlerden dolayı, GOST geliştiricileri, RGFC'nin başlatılması için senkron parselin kendisini değil, 32-З döngüsü üzerindeki dönüşümünün sonucunu kullanmaya karar verdi: ... RGHR tarafından üretilen elemanların dizisi tamamen ilk dolgusuna bağlıdır, yani bu dizinin elemanları sayılarının bir fonksiyonudur ve RGHR'nin ilk dolgusu: burada f ben(X)=f(f ben –1 (X)), f 0 (X)=X... Basit değiştirme algoritmasıyla dönüşümü hesaba katarak, anahtara bağımlılık da eklenir:

nerede Г benben-th gamut öğesi, K - anahtar.

Bu nedenle, gama modunda kullanım için gama öğeleri dizisi benzersiz bir şekilde anahtar veriler ve senkronizasyon dizisi tarafından belirlenir. Doğal olarak, şifreleme prosedürünün tersine çevrilebilirliği için, şifreleme ve şifre çözme işlemlerinde aynı senkronizasyon mesajının kullanılması gerekir. Gamın benzersiz olması gerekliliğinden, şifrenin gücünde feci bir azalmaya yol açan yerine getirilememe, aynı anahtarda iki farklı veri dizisini şifrelemek için farklı eşzamanlı mesajların kullanılmasının sağlanması gerektiğini izler. Bu, şifrelenmiş verilerle birlikte iletişim kanalları üzerinden bir senkronizasyon mesajının depolanması veya iletilmesi ihtiyacına yol açar, ancak bazı özel durumlarda, bir anahtardaki iki dizinin şifrelenmesi hariç tutulursa, özel bir şekilde önceden tanımlanabilir veya hesaplanabilir.

Şimdi gama öğeleri oluşturmak için GOST'ta kullanılan RGFC'ye daha yakından bakalım. Her şeyden önce, üretilen sayı dizisinin herhangi bir istatistiksel özelliğini sağlamanın gerekli olmadığına dikkat edilmelidir. RGPH, GOST geliştiricileri tarafından aşağıdaki koşulları yerine getirme ihtiyacına göre tasarlanmıştır:

  • rGFC tarafından üretilen sayı dizisinin tekrar periyodu, belirli bir blok boyutu için olası maksimum 264 değerinden büyük ölçüde (yüzde olarak) farklı olmamalıdır;
  • rGPC tarafından üretilen komşu değerler her baytta birbirinden farklı olmalıdır, aksi takdirde kriptanalistin görevi basitleştirilecektir;
  • RGFC'nin, çoğu 32 bit olduğu bilinen en yaygın işlemci türlerinde hem donanım hem de yazılımda uygulanması oldukça basit olmalıdır.

Listelenen ilkelere dayanarak, GOST'un yaratıcıları aşağıdaki özelliklere sahip çok başarılı bir RGPH tasarladı:

Nerede C 0 =1010101 16 ;

Nerede C 1 =1010104 16 ;

Bir sayının gösterimindeki alt simge, sayı sistemi anlamına gelir, bu nedenle bu adımda kullanılan sabitler onaltılık sayı sisteminde yazılır.

İkinci ifade yorum gerektirir, çünkü GOST metni farklı bir şey içerir :, aynı sabit değere sahip C 1. Ancak standardın metninde ayrıca, kalan modulo 2 32-1'i alma işlemi altında ortaya çıktığı yönünde bir yorum verilmiştir. orada matematikte olduğu gibi anlaşılmaz. Aradaki fark, GOST'a göre (2 32-1) mod(2 32 –1) \u003d (2 32 –1), 0 değil. Aslında bu formülün uygulanmasını basitleştirir ve matematiksel olarak doğru ifade yukarıda verilmiştir.

  • alt mertebeden bölüm için sekansın tekrar süresi 2 32, yüksek mertebeden bölüm için 2 32 –1, tüm sekans için periyot 2 32 (2 32 –1), bu gerçeğin kanıtı oldukça basit, kendiniz anlayın. İkisinin ilk formülü bir komutta, ikincisi, tüm modern 32-bit işlemcilerde iki komutta görünen hantallığına rağmen uygulanır - ilk komut, taşıma bitini depolayan olağan ekleme modulo 32'dir ve ikinci komut, taşıma bitini alınan komuta ekler. değer.

Gama modundaki şifreleme algoritmasının şeması Şekil 4'te gösterilmektedir, aşağıda şema için açıklamalar verilmiştir:


Şekil 4. Gama modunda veri şifreleme (şifre çözme) algoritması.

Adım 0

Kripto dönüşümünün ana adımı için ilk verileri tanımlar:

  • T o (w) - şifreleme (şifre çözme) prosedürüne tabi, keyfi boyutta açık (şifrelenmiş) veri dizisi; prosedür sırasında, dizi 64 bitlik kısımlara dönüştürülür;
  • S synchro paketi Gamma üretecini başlatmak için gereken 64-bit veri öğesi;

Aşama 1

Senkro-mesajın ilk dönüşümü, onu "rastgele hale getirmek", yani içinde bulunan istatistiksel düzenliliği ortadan kaldırmak için, sonuç, RGFC'nin ilk dolumu olarak kullanılır;

Adım 2

Yinelenen algoritmasını uygulayan RGPC'nin çalışmasının bir adımı. Bu adım sırasında, kıdemli ( S 1) ve daha genç ( S 0) veri dizisinin bölümleri birbirinden bağımsız olarak oluşturulur;

Aşama 3

Sakızlanma. RGCH tarafından üretilen bir sonraki 64 bitlik eleman, 32-Z çevriminde şifreleme prosedürüne tabi tutulur, sonuç, aynı boyuttaki bir sonraki açık (şifrelenmiş) veri bloğunun şifrelenmesi (şifresinin çözülmesi) için bir gama elemanı olarak kullanılır.

4. adım

Algoritmanın sonucu, şifrelenmiş (şifresi çözülmüş) bir veri dizisidir.

Şifreleme modu olarak oyun oynamanın özellikleri şunlardır:

  1. Açık bir veri dizisindeki özdeş bloklar, şifreleme sırasında farklı şifreli metin blokları verir ve bu da kimliklerini gizler.
  2. Gama kaplaması parça parça gerçekleştirildiğinden, tamamlanmamış bir veri bloğunun şifrelenmesi, bu tamamlanmamış bloğun bitlerinin gama bloğunun karşılık gelen bitleri kullanılarak şifrelenmesi olarak kolayca başarılır. Bu nedenle, 1 bitlik tamamlanmamış bir bloğu şifrelemek için, standarda göre, gama bloğundan en az anlamlı bit kullanılmalıdır.
  3. Şifrelemede kullanılan senkronizasyon mesajı, şifre çözmede kullanılmak üzere bir şekilde iletilmelidir. Bu, aşağıdaki şekillerde sağlanabilir:
  • bir senkronizasyon mesajının şifrelenmiş bir veri dizisi ile birlikte depolanması veya iletilmesi, bu, senkronizasyon mesajının boyutuna göre şifreleme sırasında veri dizisinin boyutunda, yani 8 bayt kadar bir artışa yol açacaktır;
  • önceden belirlenmiş bir senkro-mesaj değeri kullanmak veya bunu bir kaynak ve belirli bir yasaya göre bir alıcı tarafından senkronize olarak oluşturmak, bu durumda iletilen veya depolanan veri dizisinin boyutunda bir değişiklik olmaz;

Her iki yöntem de birbirini tamamlar ve birincisi, en yaygın olanının işe yaramadığı ender durumlarda, ikincisi, daha egzotik olanı kullanılabilir. İkinci yöntem çok daha az kullanışlıdır, çünkü eşzamanlama aktarımını önceden tanımlı hale getirmek, yalnızca birden fazla veri dizisinin belirli bir anahtar bilgi kümesi üzerinde bilerek şifrelenmemesi durumunda mümkündür ki bu çok sık değildir. Ayrıca, sistemdeki bir şeye sıkı bir bağlanma gerektirdiğinden, veri dizisinin kaynağında ve hedefinde eşzamanlı olarak bir eşzamanlı mesaj oluşturmak her zaman mümkün değildir. Bu nedenle, iletilen mesaj sayısını şifrelenmiş mesajları iletmek için sistemde bir senkron mesaj olarak kullanmak gibi görünürde mantıklı bir fikir uygun değildir, çünkü mesaj kaybolabilir ve alıcıya ulaşmayabilir, bu durumda kaynak ve alıcı şifreleme sistemleri senkronize olmayacaktır. Bu nedenle, söz konusu durumda, şifrelenmiş bir mesajla birlikte bir senkronizasyon mesajı iletmenin bir alternatifi yoktur.

Öte yandan, tersi örnek verilebilir. Veri şifrelemenin diskteki bilgileri korumak için kullanıldığını ve bağımsız erişimi sağlamak için düşük düzeyde uygulandığını varsayalım, veriler sektörler tarafından şifrelenir. Bu durumda, senkronizasyon mesajının şifrelenmiş verilerle birlikte saklanması imkansızdır, çünkü sektör boyutu değiştirilemez, ancak iz üzerindeki disk okuma kafa numarası, iz (silindir) numarası ve sektör numarasının bir fonksiyonu olarak hesaplanabilir. Bu durumda senkronizasyon çerçevesi, disk üzerindeki sektörün konumuna bağlıdır ve bu, diski yeniden biçimlendirmeden, yani üzerindeki verileri yok etmeden değişmesi olası değildir.

Gama modunun başka bir ilginç özelliği var. Bu modda, veri dizisinin bitleri birbirinden bağımsız olarak şifrelenir. Bu nedenle, şifreli metnin her biti, düz metnin karşılık gelen bitine ve doğal olarak dizideki bitin sıra sayısına bağlıdır: ... Bundan, şifreli metin bitini zıt değere değiştirmenin, düz metin bitinin tersine benzer bir değişikliğe yol açacağı sonucu çıkar:

nerede tersine çevrildiğini gösterir t bit değeri ().

Bu özellik, bir saldırgana şifreli metnin bitleri üzerinde hareket ederek, şifresi çözüldükten sonra gizli anahtara sahip olmadan elde edilen ilgili düz metinde tahmin edilebilir ve hatta hedeflenmiş değişiklikler yapma yeteneği verir. Bu, kriptolojide iyi bilinen gerçeği göstermektedir. gizlilik ve özgünlük farklı özelliklerdir kriptografik sistemler ... Diğer bir deyişle, şifreleme sisteminin, mesajın içeriği ile yetkisiz tanıdıklara ve mesajın yetkisiz değiştirilmesine karşı koruma sağlayan özellikleri bağımsızdır ve sadece bazı durumlarda kesişebilir. Yukarıdakiler, şifrelenmiş verilerin belirli bir gizliliğini sağlayan ve aynı zamanda değişikliklere karşı koruma sağlamayan ve tam tersi, verilerin gerçekliğini sağlayan ve hiçbir şekilde onlarla tanışma olasılığını sınırlandırmayan kriptografik algoritmalar olduğu anlamına gelir. Bu nedenle gama modunun değerlendirilen özelliği dezavantajı olarak görülmemelidir.

Geri bildirimde bulunmak.

Bu mod, gama moduna çok benzer ve ondan yalnızca gama öğeleri oluşturma yönteminde farklılık gösterir - bir sonraki gama öğesi, önceki şifrelenmiş veri bloğunun 32-Z döngü dönüşümünün bir sonucu olarak üretilir ve veri dizisinin ilk bloğunu şifrelemek için, gama öğesi, aynı şekilde dönüşümün bir sonucu olarak oluşturulur. eşzamanlı gönderme döngüsü. Bu, blok etkileşimi sağlar - bu moddaki her şifreli metin bloğu, karşılık gelen ve önceki tüm düz metin bloklarına bağlıdır. Bu nedenle, bu mod bazen blok angajman ile yapıştırma ... Blok angajman gerçeğinin şifrenin gücü üzerinde hiçbir etkisi yoktur.

Geri beslemeli gama modunda şifre çözme ve şifre çözme için algoritma şeması Şekil 5'te gösterilmektedir ve basitliği nedeniyle yorum gerektirmez.


Şekil 5. Geri beslemeli gama modunda verilerin şifrelenmesi (şifre çözülmesi) için algoritma.

Kapalı döngü gama modunda şifreleme, şifreli metin bozulmalarının karşılık gelen düz metin üzerindeki etkisi dışında, normal gama modundaki şifreleme ile aynı özelliklere sahiptir. Karşılaştırma için, yukarıdaki modların her ikisi için de blok şifre çözme işlevlerini yazalım:

Sakızlama;

Geri bildirimle saklamak;

Normal gama modunda şifreli metnin belirli bitlerindeki değişiklikler yalnızca düz metnin karşılık gelen bitlerini etkiliyorsa, kapalı döngü gama modunda resim biraz daha karmaşıktır. Karşılık gelen denklemden görülebileceği gibi, kapalı döngü gama modunda bir veri bloğunun şifresini çözerken, açık veri bloğu karşılık gelen ve önceki şifrelenmiş veri bloklarına bağlıdır. Bu nedenle, şifrelenmiş bloğa bozulmalar eklerseniz, şifre çözme işleminden sonra, iki açık veri bloğu bozulur - karşılık gelen ve bir sonraki ve ilk durumdaki bozulmalar gama modundaki ile aynı olacaktır ve ikinci durumda - moddaki gibi basit değiştirme. Başka bir deyişle, karşılık gelen açık veri bloğunda, şifrelenmiş veri bloğundaki ile aynı bitler bozulacaktır ve bir sonraki açık veri bloğunda, tüm bitler, olasılıkla 1 ile birbirinden bağımsızdır. / 2 değerlerini değiştirecek.

Bir veri dizisine benzetilmiş bir girişin geliştirilmesi.

Önceki bölümlerde, şifrelenmiş verilerle kurcalamanın ilgili herkese açık veriler üzerindeki etkisini tartıştık. Basit üzerine yazma modunda şifresini çözerken, karşılık gelen açık veri bloğunun öngörülemeyen bir şekilde bozulduğunu ve gama modunda bir bloğun şifresini çözerken değişikliklerin tahmin edilebilir olduğunu gördük. Kapalı döngü gama modunda, biri tahmin edilebilir, diğeri tahmin edilemeyen bir şekilde olmak üzere iki blok bozulur. Bu, yanlış verilerin izinsiz girişine karşı koruma açısından gama modunun kötü olduğu ve basit değiştirme ve geri besleme gama modlarının iyi olduğu anlamına mı geliyor? - Hiçbir koşulda. Bu durumu analiz ederken, şifresi çözülmüş veri bloğundaki öngörülemeyen değişikliklerin yalnızca bu aynı verilerin fazlalık olması durumunda tespit edilebileceği ve artıklık derecesi ne kadar büyükse, bozulmayı tespit etme olasılığı o kadar yüksek olduğu gerçeğini hesaba katmak gerekir. Örneğin, doğal ve yapay dillerdeki metinler için çok büyük bir fazlalık meydana gelir; bu durumda, çarpıtma gerçeği neredeyse kaçınılmaz olarak bulunur. Bununla birlikte, diğer durumlarda, örneğin, sıkıştırılmış dijitalleştirilmiş ses görüntüleri bozulduğunda, kulağımızın algılayabileceği farklı bir görüntü elde ederiz. Bu durumda, sesin doğası hakkında önceden hiçbir bilgi olmadığı sürece, distorsiyon tespit edilmeden kalacaktır. Buradaki sonuç şudur: Bazı şifreleme modlarının şifrelenmiş verilere eklenen bozulmaları tespit etme yeteneği, temelde şifrelenmiş verilerin varlığına ve fazlalık derecesine dayandığından, bu yetenek, karşılık gelen modların doğal bir özelliği değildir ve bunların bir avantajı olarak değerlendirilemez.

Belirli bir olasılıkla şifrelenmiş bir veri dizisindeki bozulmaları tespit etme sorununu çözmek için GOST, ek bir kriptografik dönüşüm modu sağlar - bir taklit ekinin geliştirilmesi. Taklit ekleme, açık verilere ve gizli anahtar bilgilerine bağlı bir kontrol kombinasyonudur. Simüle edilmiş bir giriş kullanmanın amacı, bilgi dizisindeki tüm yanlışlıkla veya kasıtlı değişiklikleri tespit etmektir. Önceki paragrafta ana hatları verilen sorun, şifrelenmiş verilere sahte bir giriş eklenerek başarıyla çözülebilir. Potansiyel bir saldırgan için, anahtara sahip değilse aşağıdaki iki görev pratik olarak imkansızdır:

  • belirli bir açık bilgi dizisi için simüle edilmiş bir eklemenin hesaplanması;
  • belirli bir taklit oranı için açık verilerin seçimi;

Simüle edilmiş bir ek oluşturmak için algoritmanın bir diyagramı Şekil 6'da gösterilmektedir.


Şekil 6. Bir veri dizisi için simüle edilmiş bir ek oluşturmak için algoritma.

Çıktıda alınan bloğun parçası, genellikle en az anlamlı 32 biti olan taklit bir ek olarak alınır. Taklit ekin boyutunu seçerken, yanlış verilerin başarılı bir şekilde yerleştirilme olasılığının 2'ye eşit olduğu dikkate alınmalıdır - | ben | Saldırganın elinde basit tahminden daha etkili bir kaba kuvvet yöntemi olmadığı sürece bir kaba kuvvet girişimi için. 32 bitlik bir taklit ek kullanıldığında, bu olasılık

GOST kriptografik algoritmalarının tartışılması.

GOST'un kriptografik kararlılığı.

Belirli bir geliştirmede kullanılmak üzere kriptografik bir algoritma seçerken belirleyici faktörlerden biri, onun gücü, yani düşmanın onu açığa çıkarma girişimlerine karşı direncidir. Daha yakından incelendiğinde, şifrenin gücü sorusu birbiriyle ilişkili iki soruya iner:

  • bu şifreyi açmak mümkün mü;
  • eğer öyleyse, pratikte ne kadar zor;

Hiç açıklanamayan şifrelere mutlak veya teorik olarak kararlı denir. Bu tür şifrelerin varlığı Shannon'ın teoremi ile kanıtlanmıştır, ancak bu gücün bedeli, her mesajı şifrelemek için mesajın kendisinin boyutundan daha az olmayan bir anahtar kullanma ihtiyacıdır. Her durumda, bir dizi özel fiyat haricinde, bu fiyat aşırıdır, bu nedenle pratikte, esas olarak mutlak güce sahip olmayan şifreler kullanılır. Bu nedenle, en yaygın şifreleme şemaları, sınırlı bir zamanda veya daha kesin olarak, her biri sayılar üzerinde belirli bir işlem olan sınırlı sayıda adımda açıklanabilir. Onlar için en önemlisi, ifşa edilmelerinin pratik zorluğunu ifade eden pratik esneklik kavramıdır. Bu zorluğun nicel bir ölçüsü, şifrenin ortaya çıkarılması, yani belirli bir şifreli metin için belirli bir değerden daha az olmayan bir olasılıkla karşılık gelen düz metni belirlemek için gerçekleştirilmesi gereken temel aritmetik ve mantıksal işlemlerin sayısı olabilir. Aynı zamanda, şifresi çözülmüş veri dizisine ek olarak, kriptanalist, açık veri bloklarına ve karşılık gelen şifrelenmiş verilere sahip olabilir veya hatta kendisi tarafından seçilen herhangi bir açık veri için karşılık gelen şifrelenmiş verileri elde etme yeteneğine sahip olabilir - listelenen ve diğer birçok belirtilmemiş koşula bağlı olarak, ayrı kriptanaliz türleri ayırt edilir.

Tüm modern şifreleme sistemleri Kirchhoff ilkesi üzerine inşa edilmiştir, yani şifreli mesajların gizliliği anahtarın gizliliği ile belirlenir. Bu, şifreleme algoritmasının kendisi kriptanalist tarafından bilinse bile, yine de ilgili anahtara sahip değilse mesajın şifresini çözemeyeceği anlamına gelir. Tüm anahtar alanı boyunca kaba kuvvetten daha verimli bir şekilde kırmanın bir yolu yoksa, bir şifrenin iyi tasarlanmış olduğu kabul edilir. tüm olası anahtar değerlerinin üzerinde. GOST muhtemelen bu prensibe karşılık gelir - yıllar süren yoğun araştırmalar boyunca, tek bir etkili kriptanaliz yöntemi önerilmemiştir. Güç açısından, önceki Amerikan şifreleme standardı DES'ten çok daha üstündür.

GOST'de 256 bitlik bir anahtar kullanılır ve anahtar alanı 2 256'dır. Şu anda var olan veya yakın gelecekte uygulanması beklenen elektronik cihazların hiçbiri, yüzlerce yıldan daha kısa bir sürede bir anahtarı alamaz. Bu değer bugünlerde simetrik kripto algoritmalar için anahtar boyutu için fiili standart haline geldi - örneğin, yeni ABD şifreleme standardı da bunu destekliyor. Eski Amerikan standardı DES, gerçek anahtar boyutu 56 bit ve yalnızca 2 56 anahtar alanıyla, modern bilgi işlem tesislerinin yetenekleri ışığında artık yeterince güçlü değil. Bu, 90'ların sonlarında DES'e yapılan birkaç başarılı kaba kuvvet saldırısı ile kanıtlandı. Ek olarak, DES'in diferansiyel ve doğrusal gibi özel kriptanaliz tekniklerine tabi olduğu kanıtlanmıştır. Bu bağlamda DES, pratik ilgi alanından çok araştırma veya bilimsel olabilir. 1998'de kriptografik zayıflığı resmen kabul edildi - ABD Ulusal Standartlar Enstitüsü DES yerine 3X şifreleme kullanılmasını önerdi. Ve 2001'in sonunda, yeni bir ABD şifreleme standardı olan AES resmi olarak onaylandı, farklı ilkeler üzerine inşa edildi ve selefinin eksikliklerinden arınmıştı.

GOST mimarisi hakkında notlar.

Yerel şifreleme standardının, aynı ilkeler üzerine inşa edilmiş bütün bir şifreleme ailesinin temsilcisi olduğu iyi bilinmektedir. En ünlü "göreli" eski Amerikan şifreleme standardı olan DES algoritmasıdır. GOST gibi tüm bu şifreler, üç seviyeli algoritmalar içerir. Her zaman "temel döngülerin" benzer bir şekilde inşa edildiği belirli bir "temel adıma" dayanır ve bir taklit ekin şifrelenmesi ve geliştirilmesi için pratik prosedürler zaten bunların temelinde inşa edilmiştir. Bu nedenle, bu ailenin şifrelerinin her birinin özgüllüğü, tam olarak ana adımında veya hatta kendi kısmında yatmaktadır. GOST'un ait olduğu klasik blok şifrelerin mimarisi bu makalenin kapsamının çok ötesinde olsa da, yine de birkaç söz söylemeye değer.

GOST gibi şifreler için "bir kripto dönüşümünün temel adımları" için algoritmalar aynı şekilde yapılandırılır ve bu mimari olarak adlandırılır. dengeli Feistel ağı (Dengeli Feistel ağı) ilk öneren kişiden sonra. Bir döngüde veri dönüştürme şeması veya yaygın adıyla, yuvarlak , Şekil 7'de gösterilmiştir.


Şekil 7. GOST gibi blok şifreleri için kripto dönüşümünün ana adımının içeriği.

Ana adımın girişine, yüksek ve düşük yarıları birbirinden ayrı olarak işlenen eşit boyutlu bir blok beslenir. Dönüşüm sırasında, bloğun alt yarısı daha yüksek olanın yerine yerleştirilir ve üst yarısı bitsel işlem kullanılarak birleştirilir " özel veya »Küçük olanın yerine bazı fonksiyonların hesaplanması sonucu. Bu işlev, bloğun alt yarısını ve anahtar bilginin bir öğesini argüman olarak alır ( X), şifrenin önemli bir parçasıdır ve denir şifreleme işlevi ... Çeşitli nedenlerle, şifreli bloğu aynı boyutta iki parçaya bölmenin avantajlı olduğu ortaya çıktı: | N 1 |=|N 2 | - bu gerçek mimari adına "dengeli" kelimesine yansımıştır. Bununla birlikte, dengeli olmayanlar kadar sık \u200b\u200bolmasa da, zaman zaman dengesiz şifreleme ağları da kullanılmaktadır. Ek olarak, şifrenin gücüne ilişkin hususlar, anahtar öğenin boyutunun yarım blok boyutundan daha az olmamasını gerektirir: GOST'ta, üç boyutun tümü 32 bite eşittir .

Yukarıdakileri GOST algoritmasının ana adımının şemasına uygularsak, algoritmanın 1,2,3 bloklarının (bkz. Şekil 1) şifreleme fonksiyonunun hesaplamasını belirlediği ve 4 ve 5 numaralı blokların giriş bloğunun içeriğine göre ana adımın çıkış bloğunun oluşumunu belirlediği anlaşılacaktır. ve şifreleme işlevinin değerleri. Gizli bir anahtara sahip modern blok şifrelerin mimarileri hakkında daha fazla ayrıntı klasik eserlerde veya uyarlanmış bir biçimde işlerimde bulunabilir.

Önceki bölümde, DES ve GOST'u güç açısından karşılaştırdık, şimdi bunları işlevsel içerik ve uygulama kolaylığı açısından karşılaştıracağız. GOST şifreleme döngülerinde, ana adım 32 kez tekrarlanır, DES için bu değer 16'dır. Bununla birlikte, GOST şifreleme fonksiyonunun kendisi, birçok düzensiz bit permütasyonunun bulunduğu analog DES fonksiyonundan çok daha basittir. Bu işlemler günümüzün uzman olmayan işlemcilerinde son derece verimsizdir. GOST bu tür işlemleri içermez, bu nedenle yazılım uygulaması için çok daha uygundur.

Yazar tarafından Intel x86 platformu için değerlendirilen DES uygulamalarının hiçbiri, iki kat daha kısa döngüye rağmen bu makalede dikkat etmeniz için önerilen GOST uygulamasının performansının yarısına bile ulaşamıyor. Yukarıdakilerin tümü, GOST geliştiricilerinin DES'in hem olumlu hem de olumsuz yönlerini hesaba kattığını ve ayrıca kriptanalizin mevcut ve ümit verici olanaklarını daha gerçekçi bir şekilde değerlendirdiğini göstermektedir. Ancak, şifreleme uygulamalarının performansını karşılaştırırken DES'i temel almak artık uygun değildir. Yeni ABD şifreleme standardı, "temel işlemlerin" sayısı açısından karşılaştırıldığında - GOST ile aynı 256 bit anahtar boyutuyla, AES ondan yaklaşık% 14 daha hızlı - verimlilikle çok daha iyi iş yapıyor. Ek olarak, GOST'un paralel hale getirilmesi pratik olarak imkansızdır, oysa AES bu konuda çok daha fazla yeteneğe sahiptir. Bazı mimarilerde, AES'in bu avantajı daha az, bazılarında daha fazla olabilir. Yani, Intel Pentium işlemcide% 28'e ulaşıyor. Detaylar bulunabilir.

Temel bilgiler ve temel kaynaklar için kalite gereksinimleri.

Tüm anahtarlar ve ikame tabloları maksimum şifreleme gücü sağlamaz. Her şifreleme algoritmasının, anahtar bilgilerini değerlendirmek için kendi kriterleri vardır. Bu nedenle, DES algoritması için sözde " zayıf anahtarlar ”, Açık ve şifrelenmiş veriler arasındaki bağlantının yeterince maskelenmediği ve şifrenin kırılması nispeten kolay olduğu durumlarda.

Anahtarlar ve GOST değiştirme tabloları için kalite kriterleri hakkındaki soruya kapsamlı bir cevap, eğer herhangi bir yerde elde edilebiliyorsa, o zaman sadece algoritmanın geliştiricilerinden. İlgili veriler açık basında yayınlanmadı. Ancak, yerleşik prosedüre göre, yetkili bir kuruluştan alınan anahtar veriler, damgası olan bilgileri şifrelemek için kullanılmalıdır. Dolaylı olarak bu, "bitler" için anahtar verileri kontrol etmek için yöntemlerin varlığını gösterebilir. GOST'ta zayıf anahtarların varlığı tartışmalı bir konuysa, zayıf yedek düğümlerin varlığı şüphesizdir. Açıktır ki, herhangi bir değerin kendisi tarafından değiştirildiği "önemsiz" ikame tablosu o kadar zayıftır ki, onu kullanırken, anahtar ne olursa olsun, şifre basitçe kırılır.

Yukarıda belirtildiği gibi, temel bilgilerin değerlendirilmesine yönelik kriterler mevcut değildir, ancak bunlar hakkında yine de bazı genel değerlendirmeler yapılabilir.

Anahtar

Anahtar, 0 ve 1 değerlerini eşit olasılıkla alan, istatistiksel olarak bağımsız bitlerden oluşan bir dizi olmalıdır.Bazı özel anahtar değerlerinin "zayıf" olabileceği, yani şifrenin kullanılması halinde belirli bir güvenlik seviyesi sağlamayabileceği tamamen göz ardı edilemez. Bununla birlikte, muhtemelen, bu tür değerlerin tüm olası anahtarların toplam kütlesindeki payı ihmal edilebilir. En azından, şifrelemeyle ilgili yoğun çalışmalar, bilinen (yani FAPSI tarafından önerilen) değiştirme tablolarından herhangi biri için böyle bir anahtarı henüz ortaya çıkarmamıştır. Bu nedenle, gerçekten rastgele sayı üretecinin yardımıyla üretilen anahtarlar, birinden ihmal edilebilir bir miktarda farklılık gösteren bir olasılıkla nitel olacaktır. Anahtarlar sözde rasgele bir sayı üreteci kullanılarak üretilirse, kullanılan oluşturucunun yukarıdaki istatistiksel özellikleri sağlaması ve dahası, GOST'un kendisinden daha az olmamak üzere yüksek bir kriptografik güce sahip olması gerekir. Başka bir deyişle, jeneratör tarafından üretilen eleman dizisinin eksik üyelerini belirleme problemi, şifrenin kırılması probleminden daha kolay olmamalıdır. Ek olarak, zayıf istatistiksel özelliklere sahip anahtarları filtrelemek için çeşitli istatistiksel kriterler kullanılabilir. Uygulamada, genellikle iki kriter yeterlidir - Pearson testi ("ki-kare") genellikle 0 ve 1 değerleri arasındaki anahtar bitlerin eşlenebilir dağılımını kontrol etmek için kullanılır ve çalıştırma testi anahtar bitlerin bağımsızlığını kontrol etmek için kullanılır. Ders kitaplarında veya matematiksel istatistikle ilgili referans kitaplarında bahsedilen kriterleri okuyabilirsiniz.

Anahtar oluşturmak için en iyi yaklaşım, donanım orta kademe sensörleri kullanmak olacaktır, ancak bu, ekonomik nedenlerden dolayı her zaman kabul edilebilir değildir. Küçük hacimli bir anahtar bilgi dizisi oluştururken, böyle bir sensörü kullanmaya makul bir alternatif, rasgele bitlerin bir sonraki üretilen kısmı, operatörün bilgisayar klavyesi üzerinde bir tuşa bastığı zamana bağlı olduğunda, "elektronik rulet" yöntemiyle pratikte yaygın olarak kullanılır ve kullanılır. Bu şemada, rastgele verilerin kaynağı, bilgisayar kullanıcısıdır, daha doğrusu, tepkisinin zamansal özellikleridir. Bu durumda, bir tuş vuruşunda yalnızca birkaç bitlik rastgele veri üretilebilir, bu nedenle anahtar bilgi üretiminin genel hızı saniyede birkaç bit kadar yüksek değildir. Açıktır ki, bu yaklaşım büyük anahtar dizileri elde etmek için uygun değildir.

Büyük miktarda anahtar bilginin üretilmesinin gerekli olduğu durumda, sözde rasgele sayıların çeşitli yazılım sensörlerini kullanmak mümkündür ve çok yaygındır. Böyle bir sensör yüksek kriptografik direnç gerektirdiğinden, şifrenin kendisini bir gama üreteci olarak kullanmak doğaldır - her biri GOST - 32 bayt için, şifre tarafından üretilen gamayı gerekli boyutta "parçalara" "keseriz". Tabii ki, bu yaklaşım için, yukarıda açıklanan elektronik rulet yöntemini kullanarak elde edebileceğimiz bir "ana anahtara" ihtiyacımız var ve bunun yardımıyla, gama üreteci modunda şifreyi kullanarak, gerekli hacimde bir dizi anahtar bilgi elde ediyoruz. Dolayısıyla, anahtar oluşturmanın bu iki yolu - "manuel" ve "algoritmik" - birbirini tamamlayarak birlikte çalışır. Bilginin kriptografik olarak korunmasına yönelik "düşük bütçeli" sistemlerdeki anahtar oluşturma şemaları, neredeyse her zaman bu ilkeye göre oluşturulur.

Yedek tablo

Değiştirme tablosu uzun vadeli bir anahtar unsurdur, yani tek bir anahtardan çok daha uzun bir süre geçerlidir. Tek bir kriptografik koruma sistemi içindeki tüm şifreleme düğümlerinde ortak olduğu varsayılmaktadır. İkame tablosunun gizliliği ihlal edilse bile, şifrenin gücü son derece yüksek kalır ve kabul edilebilir sınırın altına düşmez. Bu nedenle, tabloyu gizli tutmaya özel bir ihtiyaç yoktur ve GOST'un çoğu ticari uygulamasında bu şekilde yapılır. Öte yandan, ikame tablosu, tüm şifrenin gücünü sağlamak için kritik bir unsurdur. Yanlış tablonun seçilmesi, şifrenin bilinen kriptanaliz teknikleriyle kolayca kırılmasına neden olabilir. Yedek düğümlerin geliştirilmesi için kriterler bir sırdır ve FAPSI'nin yakın gelecekte bunu halkla paylaşması pek olası değildir. Nihayetinde, belirli bir ikame tablosunun iyi mi yoksa kötü mü olduğuna karar vermek muazzam miktarda çalışma gerektirir - binlerce insan ve makine saati. Seçilip kullanıldıktan sonra, tablo, ancak ve ancak kullanımıyla birlikte şifrenin bir veya başka tür kriptanalize karşı savunmasız olduğu ortaya çıktığında değiştirilmelidir. Bu nedenle, şifrenin ortalama bir kullanıcısı için en iyi seçim, halka açık hale gelen birkaç tablodan birini almak olacaktır. Örneğin, hash işlevi standardından, aynı zamanda "merkez bankası" dır; Bu tablolarla ilgili bilgiler açık basında ve hatta iyi arama yaparsanız internette bulunabilir.

Kolay yoldan gitmeye alışkın olmayanlar için, aşağıda yüksek kaliteli tablolar elde etmek için genel bir şema verilmiştir:

  1. Bir yöntemi veya diğerini kullanarak, garantili doğrusal olmama özelliklerine sahip sekiz yedek düğüm kümesi geliştirirsiniz. Bu tür birkaç teknik vardır, bunlardan biri, sözde bükülmüş fonksiyonların kullanılmasıdır.
  2. DES değiştirme düğümleri için yayınlananlar gibi en basit "kalite kriterlerinin" karşılandığını doğrulayın. İşte bazı daha genel hususlar: Her ikame düğümü, dört mantıksal bağımsız değişkenden dört mantıksal işlevle tanımlanabilir. Bu işlevler yazılıysa minimal form (yani, minimum olası ifade uzunluğu ile) yeterince karmaşık değildir, bu tür bir ikame düğümü reddedilir. Ek olarak, tüm ikame tablosundaki bireysel işlevler birbirinden yeterince farklı olmalıdır. Bu aşamada, kasıtlı olarak düşük kaliteli birçok masa ortadan kaldırılır.
  3. Seçtiğiniz tabloları içeren şifreleme için, farklı kriptanaliz türlerine karşılık gelen farklı yuvarlak modeller oluşturun ve karşılık gelen "profil" özelliklerini ölçün. Dolayısıyla, doğrusal kriptanaliz için, şifreleme turunun doğrusal bir istatistiksel analoğunu oluşturun ve "profil" özelliğini - doğrusal olmama göstergesi - hesaplayın. Yetersiz ise, değiştirme tablosu reddedilir.
  4. Son olarak, önceki paragrafın sonuçlarını kullanarak, seçtiğiniz tablonun şifresini yoğun bir araştırmaya tabi tutarsınız - bilinen tüm yöntemlerle kriptanaliz denemesi. Bu aşama en zor ve zaman alıcıdır. Ancak yüksek kalitede yapılırsa, o zaman yüksek bir olasılıkla, seçtiğiniz tabloların şifresinin sadece ölümlüler tarafından açılmayacağı ve muhtemelen özel hizmetler için çok zor olacağı söylenebilir.

Bununla birlikte, çok daha kolay yapabilirsiniz. Önemli olan, şifrede ne kadar çok tur varsa, bir turun güç özelliklerinin tüm şifrenin gücü üzerindeki etkisi o kadar azdır. GOST'ta 32 tur var - benzer bir mimariye sahip hemen hemen tüm şifrelerden daha fazla. Bu nedenle, çoğu ev ve ticari uygulama için, 0'dan 15'e kadar bağımsız rastgele sayı permütasyonları olarak ikame düğümleri elde etmek yeterlidir. Bu, örneğin, her birine belirli aralıktaki değerlerden birine atanan on altı kartlık bir destenin karıştırılmasıyla pratik olarak uygulanabilir.

Oyuncu değişikliği tablosu ile ilgili daha ilginç bir gerçeğe dikkat edilmelidir. "32-Z" ve "32-P" şifreleme döngülerinin tersine çevrilebilirliği için, yedek düğümlerin 0'dan 15'e kadar sayıların permütasyonları olması gerekli değildir. Yedek düğümde yinelenen öğeler olsa bile her şey çalışır ve değiştirme böyle bir düğüm tarafından belirlenir , geri döndürülemez, ancak bu durumda şifrenin gücü azalır. Bunun neden böyle olduğu bu makalede ele alınmıyor, ancak gerçeğin kendisine ikna olmak zor değil. Bunu yapmak için, düğümleri yinelenen değerler içeren böyle bir "hatalı" değiştirme tablosu kullanarak veri bloğunu ilk önce şifrelemeyi ve sonra şifresini çözmeyi denemek yeterlidir.

GOST üzerindeki varyasyonlar

Çoğu zaman, bir kriptografik veri koruma sisteminde kullanım için, GOST'den daha hızlı bir uygulama hızına sahip bir algoritma gereklidir ve bu, bu kadar yüksek bir kriptografik güç gerektirmez. Bu tür görevlerin tipik bir örneği, alım satım oturumlarını gerçek zamanlı olarak yöneten çeşitli elektronik borsa ticaret sistemleridir. Burada, kullanılan şifreleme algoritmaları, sistemin operasyonel verilerinin oturum sırasında şifresini çözmenin imkansız olması için gereklidir (gönderilen siparişler, sonuçlanan anlaşmalar vb.), Süresi dolduktan sonra, bu veriler, kural olarak, davetsiz misafirlere zaten yararsızdır. Başka bir deyişle, yalnızca birkaç saatlik garantili dayanıklılık gereklidir - bu, bir işlem seansının tipik uzunluğudur. Bu durumda tam teşekküllü bir GOST kullanımının serçelere bir top ateşlemesi olacağı açıktır.

Şifreleme hızını artırmak için bu ve benzeri durumlarda ne yapmalı? Cevap yüzeyde yatıyor - temel döngülerde daha az temel adım (tur) ile şifrenin bir modifikasyonunu kullanmak. Şifreleme turlarının sayısını düşürdüğümüz zaman, performans aynı sayıda artar. Bu değişiklik iki şekilde sağlanabilir - anahtar uzunluğunu azaltarak ve anahtarın "tarama döngülerinin" sayısını azaltarak. Temel şifreleme döngülerindeki temel adımların sayısının N=n mnerede n - anahtardaki 32 bitlik elemanların sayısı, m - standartta temel unsurları kullanma döngü sayısı n=8, m\u003d 4. Bu sayılardan herhangi birini azaltabilirsiniz, ancak en basit seçenek, kullanım düzenini etkilemeden anahtar uzunluğunu azaltmaktır.

İşi hızlandırmak için ödenecek bedelin şifrenin gücünde bir azalma olacağı açıktır. Asıl zorluk, bu düşüşün büyüklüğünü aşağı yukarı doğru bir şekilde tahmin etmenin oldukça zor olmasıdır. Açıkçası, bunu yapmanın tek olası yolu, "tam olarak" azaltılmış kriptografik dönüşüm döngüleri ile şifrenin varyantları üzerinde bir çalışma yürütmektir. İlk olarak, bunun yalnızca GOST geliştiricilerine ait olan kapalı bilgilerin kullanılmasını gerektirdiği ve ikincisi çok zahmetli olduğu açıktır. Bu nedenle, şimdi çok, çok kaba, sadece genel yasalara dayalı bir değerlendirme yapmaya çalışacağız.

Şifrenin "kapsamlı" yöntemlerle kırılmaya, yani "kapsamlı" bir saldırıya karşı direncine gelince, burada her şey aşağı yukarı açıktır: 64 bitlik bir anahtar, bu tür saldırılara erişimin sınırında bir yerdedir, anahtarı 96 bit ve üstü olan bir şifre ( anahtarın 32 bitlik bir tamsayı içermesi gerektiğini unutmayın) buna karşı oldukça sağlamdır. Nitekim, birkaç yıl önce, eski ABD şifreleme standardı DES, kaba kuvvetle defalarca saldırıya uğradı - önce küresel İnternet temelinde organize edilmiş bir bilgisayar ağı tarafından ve ardından özel bir ağ tarafından saldırıya uğradı, yani. bunun için özel olarak tasarlanmış bir bilgisayar. Modern işlemcilerdeki yazılıma uygulandığında GOST'un standart sürümünün DES'ten dört kat daha hızlı olduğunu varsayalım. Daha sonra 8 turluk "azaltılmış GOST", DES'ten 16 kat daha hızlı çalışacaktır. DES'in kırılmasından bu yana, Moore Yasasına göre hesaplama performansının dört katına çıktığını da varsayalım. Sonuç olarak, artık sekiz döngü ile "azaltılmış GOST" için bir 64-bit anahtarın doğrulanmasının, zamanında yapılan bir DES anahtarının doğrulanmasından 64 kat daha hızlı gerçekleştirildiğini anlıyoruz. Bu nedenle, kapsamlı saldırının karmaşıklığı açısından bu GOST sürümünün DES'e göre avantajı, 2 64-56 \u003d 2 8 \u003d 256'dan 256'ya düşürülmüştür. / 64 \u003d 4 kez. Katılıyorum, bu çok yanıltıcı bir fark, neredeyse hiçbir şey.

GOST'un zayıflatılmış modifikasyonlarının "yoğun" kriptanaliz yöntemlerine karşı direncini değerlendirmek çok daha zordur. Bununla birlikte, burada da genel bir model izlenebilir. Gerçek şu ki, şu anda en güçlü kriptanaliz türlerinin çoğunun "profil" özellikleri katlanarak şifreleme turlarının sayısına bağlıdır. Dolayısıyla, doğrusal kriptanaliz (LCA) için bu doğrusallık özelliği olacaktır. L :

nerede C ve sabitler, R mermi sayısıdır. Diferansiyel kriptanaliz için benzer bir ilişki mevcuttur. "Fiziksel anlamlarına" göre, bu türden tüm özellikler olasılıklardır. Genellikle, kriptanaliz için gereken ilk veri miktarı ve zahmetli olması, bu tür özelliklerle ters orantılıdır. Bu emek yoğunluğu göstergelerinin, temel şifreleme adımlarının sayısının artmasıyla katlanarak arttığı anlaşılmaktadır. Bu nedenle, mermi sayısının birkaç kat azalmasıyla, en ünlü analiz türlerinin emek yoğunluğu, - çok kabaca ve kabaca - bu derecenin ilk sayıdan kökü olarak değişecektir. Bu, dayanıklılıkta çok büyük bir düşüş.

Öte yandan GOST, geniş bir güvenlik marjı ile tasarlanmıştır ve bugün diferansiyel ve doğrusal dahil olmak üzere bilinen tüm kriptanaliz türlerine dirençlidir. LCA ile ilgili olarak, bunun anlamı, başarılı bir şekilde uygulanması için, "doğada var olmaktan" daha fazla "açık blok şifreli blok" çifti, yani 2 64'ten fazla gereklidir. Yukarıdakileri dikkate alarak, bu, başarılı bir LCA 16 turlu GOST için en az blok veya 2 35 bayt veya 32 GB veri ve 8 turluk bir - en az blok veya 2 19 bayt veya 0,5 MB gerektireceği anlamına gelir.

Yukarıdakilerin hepsinden sonuçlar, GOST'un indirgenmiş versiyonlarının özelliklerini özetleyen aşağıdaki tabloda verilmiştir.

Mermi sayısı Anahtar boyutu, bit Hızlı eylem indeksi Şifrenin olası özellikleri (çok kaba bir tahmin)
24 192 1,33 Bilinen uzay aracı türlerinin çoğuna dirençli olmak veya kararlılığın eşiğinde olmak. Uzay aracının pratik uygulaması, ilk veriler ve emek yoğunluğu için yüksek gereksinimler nedeniyle imkansızdır.
16 128 2 Bazı kriptanaliz türleri için teorik olarak istikrarsızdır, ancak çoğu durumda bunların pratik uygulaması, ilk veriler ve emek yoğunluğu için yüksek gereksinimler nedeniyle zordur.
12 95 2,67 Bazı iyi bilinen kriptanaliz türlerine karşı dirençli değildir, ancak kısa bir süre için küçük miktarlardaki verilerin (onlarca yüzlerce KB'ye kadar) gizliliğinin sağlanması için uygundur.
8 64 4 Bilinen bazı kriptanaliz türlerine karşı dirençli değildir, ancak kısa bir süre için küçük miktarlardaki verilerin (onlarca KB'ye kadar) gizliliğini sağlamak için uygundur.

12 ve 8 turlu son iki seçenek çok, çok sınırlı süre koruması sağlayabilir. Kullanımları, yalnızca birkaç saat boyunca kapatılan verilerin kısa vadeli gizliliğinin gerekli olduğu görevlerde haklıdır. Bu zayıf şifreleme seçenekleri için olası bir uygulama alanı, elektronik borsa ticaret sistemlerinin UDP trafiğinin kapatılmasıdır. Bu durumda, her veri paketi (datagram, UDP kısaltmasının ortasındaki "D") ayrı bir 64-bit anahtar üzerinde şifrelenir ve anahtarın kendisi oturum anahtarında (kapsamı iki bilgisayar arasında bir iletişim oturumu olan bir anahtar) şifrelenir ve birlikte iletilir. veri.

GOST'un azaltılmış sürümleriyle bitmeden önce, yukarıdaki tüm hususların oldukça spekülatif olduğunu söyleyeceğim. Standart, yalnızca 32 yuvarlaklık bir varyasyon için dayanıklılık sağlar. Ve hiç kimse size şifrenin azaltılmış varyantlarının kırılmaya karşı direncinin yukarıda belirtilen şekilde değişeceğine dair herhangi bir garanti veremez. Yine de geliştirmelerinizde kullanmaya karar verirseniz, ayaklarınızın altından her an çıkabilecek çok sarsıntılı bir zemine bastığınızı unutmayın. Şifreleme hızı sizin için kritik olduğundan, daha hızlı bir şifre veya daha güçlü bir bilgisayar kullanmayı düşünmelisiniz? Bunun yapılması gereken bir diğer husus, GOST'un zayıflatılmış sürümlerinin, kullanılan yedek düğümlerin kalitesine mümkün olduğunca duyarlı olacağıdır.

İncelenen konunun bir dezavantajı var. Ya şifreleme hızı kritik değilse ve güvenlik gereksinimleri çok katıysa? GOST'un sürdürülebilirliğini artırmanın iki yolu vardır - bunlara "kapsamlı" ve "yoğun" diyelim. İlki, şifreleme turlarının sayısındaki basit bir artıştan başka bir şey değildir. Bunun neden gerekli olabileceği benim için tam olarak açık değil, çünkü yerel standart, onsuz gerekli dayanıklılığı sağlıyor. Bununla birlikte, paranoyadan gerekli seviyenin üzerinde muzdaripseniz (ve tüm "bilgi savunucuları" bundan muzdaripse, bu profesyonel bir uygunluk koşuludur, soru sadece davanın ciddiyetindedir :), biraz sakinleşmenize yardımcı olacaktır. Bu KGB şifresinden veya kullandığınız ikame tablosundan emin değilseniz, basitçe çift, dörtlü vb. raund sayısı - davanızın ciddiyetine göre çokluğu seçin. Bu yaklaşım, şifrenin gücünü gerçekten artırmanıza izin verir - eğer daha önceki kriptanaliz basitçe imkansızsa, şimdi bunun karesi imkansız!

Daha karmaşık ve ilginç bir soru, temel şifreleme adımlarının sayısını ve yapısını değiştirmeden şifrenin gücünü artırmanın mümkün olup olmadığıdır. Şaşırtıcı bir şekilde, bunun cevabı evet, ancak yine de spekülasyonun sallantılı zeminine adım atıyoruz. Gerçek şu ki, GOST'de, ana dönüştürme adımında, 4 bitin 4 bit ile değiştirilmesi gerekiyordu, ancak pratikte (bunun hakkında daha sonra konuşacağız) tüm yazılım uygulamaları, bayt yerine bayt yerine, yani. 8'e 8 bit - bu, verimlilik nedenleriyle yapılır. Böyle bir değişikliği hemen 8 bitlik olarak tasarlarsak, bir turun özelliklerini önemli ölçüde geliştireceğiz. İlk olarak, "difüzyon" özelliği veya "çığ" göstergesi artacaktır - orijinal verilerin bir biti ve / veya anahtar, sonucun daha fazla bitini etkileyecektir. İkinci olarak, büyük yer değiştirme düğümleri için, daha düşük diferansiyel ve doğrusal özellikler elde etmek mümkündür, böylece şifrenin aynı tür kriptanalize duyarlılığı azaltılır. Bu, özellikle azaltılmış GOST döngüleri için geçerlidir ve 8 ve 12 yuvarlak seçenekler için böyle bir adım basitçe gereklidir. Bu, tur sayısındaki düşüşten dolayı içlerindeki dayanıklılık kaybını bir şekilde telafi edecektir. Bu tekniği kullanmayı zorlaştıran şey, bu tür "büyütülmüş" yedek üniteleri kendiniz tasarlamanız gerekecek olmasıdır. Ve ayrıca daha büyük düğümlerin tasarlanmasının küçük olanlardan çok daha zor olduğu gerçeği.

Standardın standart dışı kullanımı.

Tabii ki GOST kripto algoritmalarının temel amacı veri şifreleme ve taklit korumadır. Bununla birlikte, doğal olarak bilgi güvenliğiyle ilgili başka kullanımlar bulabilirler. Bunlardan kısaca bahsedelim:

1. Gama modunda şifreleme için GOST, iyi istatistiksel özelliklere ve yüksek kriptografik güce sahip bir bit dizisi olan bir kriptografik gamın geliştirilmesini sağlar. Ayrıca bu gam, açık verileri değiştirmek için kullanılır ve bu da şifrelenmiş verilerle sonuçlanır. Ancak bu, kriptografik gamın tek olası uygulaması değildir. Gerçek şu ki, üretimi için algoritma, mükemmel özelliklere sahip sözde rasgele bir sayı dizisi üretecidir (PRNG). Elbette, üretilen dizinin yalnızca istatistiksel özelliklerinin elde edilmesinin gerekli olduğu ve kriptografik gücün gerekli olmadığı bu tür bir GPPC'nin kullanılması çok makul değildir, bu çok makul değildir - bu durumlar için çok daha verimli jeneratörler vardır. Ancak bilgi güvenliği ile ilgili çeşitli uygulamalar için böyle bir kaynak çok faydalı olacaktır:

  • Yukarıda belirtildiği gibi, gam, anahtar yapımı için bir "hammadde" olarak kullanılabilir. Bunu yapmak için, sadece gerekli uzunluktaki ölçeğin bir bölümünü - 32 bayt almanız gerekir. Bu şekilde, anahtarlar gerektiği gibi üretilebilir ve saklanmasına gerek kalmaz - eğer böyle bir anahtara tekrar ihtiyaç duyulursa, onu yeniden üretmek yeterince kolay olacaktır. Yalnızca orijinal olarak hangi anahtarda geliştirildiğini, hangi senkronizasyon mesajının kullanıldığını ve anahtarın üretilen ölçeğin hangi baytından başladığını hatırlamak gerekli olacaktır. Kullanılan anahtar dışındaki tüm bilgiler sınıflandırılmamıştır. Bu yaklaşım, yalnızca bir "ana anahtar" kullanarak oldukça karmaşık ve dallanmış bir anahtar sistemini kontrol etmeyi kolaylaştıracaktır.
  • Bir öncekine benzer şekilde gama, şifre oluşturmak için hammadde olarak kullanılabilir. Burada şu soru ortaya çıkabilir, neden onları üretmeniz gerekiyor, gerektiği gibi icat etmek daha kolay değil mi? Bu yaklaşımın başarısızlığı, bilgisayar ağlarında meydana gelen bir dizi vaka tarafından fazlasıyla kanıtlandı; bunların en büyüğü, Morris solucanının neden olduğu Kasım 1988'de 24 saatlik İnternet felci idi. Kötü amaçlı bir programın bilgisayara sızma yollarından biri şifre tahmin etmekti: program sisteme girmeye çalıştı, birkaç yüzlük dahili listesinden şifreleri sırayla denedi ve vakaların önemli bir kısmında başarılı oldu. Adamın şifre icat etme fantezisinin çok zayıf olduğu ortaya çıktı. Bu nedenle, güvenliğe gereken önem verilen organizasyonlarda, şifreler güvenlik sistemi yöneticisi tarafından oluşturulur ve kullanıcılara dağıtılır. Parola oluşturmak, anahtarları oluşturmaktan biraz daha zordur, çünkü bu durumda "ham" ikili gamın sadece parçalara "kesilmemesi" değil, sembolik biçime dönüştürülmesi gerekir. Ek olarak, alfabenin tüm karakterlerinin şifrede eşit şekilde görünmesini sağlamak için ayrı değerlerin atılması gerekebilir.
  • Kriptografik gamı \u200b\u200bkullanmanın bir başka yolu, manyetik ortamda veri silinmesini garanti etmektir. Gerçek şu ki, bilgileri manyetik bir ortama yeniden yazdıktan sonra bile, uygun bir inceleme ile geri yüklenebilen önceki verilerin izleri kalır. Bu izleri ortadan kaldırmak için bu tür yeniden yazma birçok kez yapılmalıdır. Silinen bilgiyi kurtarmaya çalışan uzmanlar tarafından bilinmeyen böyle bir prosedür sırasında rasgele veya sözde rasgele veriler kullanılacaksa, taşıyıcı üzerine bilgilerin daha az sayıda yeniden yazılmasının gerekli olacağı ortaya çıktı. Şifrenin ölçeği burada çok faydalı olacak.

2. Yalnızca kriptografik gam değil, aynı zamanda kriptografik dönüşümün kendisi de şifrelemeyle doğrudan ilgili olmayan ihtiyaçlar için kullanılabilir:

  • GOST'u kullanmak için bu seçeneklerden birinin, veri dizileri için simüle edilmiş bir ekin geliştirilmesi olduğunu biliyoruz. Bununla birlikte, GOST dahil olmak üzere herhangi bir blok şifrelemeye dayanarak, literatürde MDC olarak da adlandırılan ve farklı kaynaklarda şu şekilde deşifre edilen tek yönlü bir hash fonksiyonunu hesaplamak için bir şema oluşturmak oldukça kolaydır. algılama kodunu değiştir / manipülasyonlar (Modifikasyon / Manipülasyon Deteksiyon Code) veya mesaj özeti (Mesaj Digest Code). İlk transkript literatürde çok daha erken ortaya çıktı, ikincisi, daha kısa olanı sanırım ilkini hatırlayamayanlar tarafından icat edildi :) - bu bir şakaydı. MDC, güvenlik taklit sistemlerinde, gizli anahtara bağlı olmamakla birlikte, bir taklit ekin bir analogu olarak doğrudan kullanılabilir. Ek olarak, MDC, elektronik dijital imza (EDS) şemalarında yaygın olarak kullanılmaktadır, çünkü bu tür şemaların çoğu, sabit boyutta bir veri bloğunun imzalanmasına elverişli olacak şekilde tasarlanmıştır. Bildiğiniz gibi, tartışılan standart GOST 28147-89 temelinde, tek yönlü karma işlevi GOST R34.11-94 hesaplamak için Rusya Federasyonu standardı oluşturulmuştur.
  • GOST dahil olmak üzere herhangi bir blok şifrelemeye dayanarak, gizli bir imza anahtarı ve açık bir doğrulama kombinasyonu ile tamamen işlevsel bir EDS şemasının oluşturulabileceği daha az bilinmektedir. Bir dizi nedenden ötürü, bu şema geniş bir pratik dağıtım almamıştır, ancak bazı durumlarda hala dünyadaki hâlihazırda baskın olan "matematiksel" EDS şemalarına çok çekici bir alternatif olarak düşünülebilir.

Edebiyat

Bilgi işleme sistemleri. Kriptografik koruma. Kriptografik dönüşüm GOST 28147-89 için algoritma. Durum Com. SSCB standartlarına göre, M., 1989. ftp://ftp.wtc-ural.ru/pub/ru.crypt/GOST-28147
Shannon Claude. Gizli sistemlerin matematiksel teorisi. "Bilgi teorisi ve sibernetik üzerine çalışmalar" koleksiyonunda, M., IL, 1963, s. 333-369. http://www.enlight.ru/crypto/articles/shannon/shann__i.htm
Federal Bilgi İşleme Standardı (FIPS) 197, Advanced Encryption Standard (AES), Federal Register Vol. 66, Hayır. 235 / Perşembe, 6 Aralık 2001 / Bildirimler, s. 63369-63371. http://csrc.nist.gov/encryption/aes/
Feistel Horst. Kriptografi ve Bilgisayar Güvenliği. Horst Feistel tarafından yayınlanan A. Vinokurov tarafından çevrilmiştir. Şifreleme ve Bilgisayar Gizliliği, Scientific American, Mayıs 1973, Cilt. 228, Hayır. 5, s. 15-23. http://www.enlight.ru/crypto/articles/feistel/feist_i.htm
Schneier Bruce. Uygulamalı kriptografi. 2. baskı C dilinde protokoller, algoritmalar ve kaynak metinler., M., "Triumph", 2002 http://www.ssl.stu.neva.ru/psw/crypto/appl_rus/appl_cryp.htm
Menezes Alfred, van Oorschot Paul, Vanstone Scott. Uygulamalı kriptografi el kitabı. ttp: //www.cacr.math.uwaterloo.ca/hac/
Vinokurov Andrey. Bir blok şifreleme nasıl çalışır? El yazması. http://www.enlight.ru/crypto/articles/vinokurov/blcyph_i.htm
Vinokurov Andrey. Çevrimiçi iNFUSED BYTES için kriptografik sorunlar. http://www.enlight.ru/crypto/articles/ib/ib.htm
Vinokurov Andrey, Primenko Eduard. "Rusya Federasyonu ve Amerika Birleşik Devletleri'nde şifreleme standartlarının yazılım uygulaması üzerine" raporunun metni, bilgilendirme konferansı, Moskova, MEPhI, 28-29 Ocak 2001. Konferans bildirilerinde yayınlanmıştır.
Bilgi Teknolojisi. Kriptografik bilgi koruması. Hash fonksiyonu GOST R34.11-94, Gosstandart RF, M., 1994.

Şifrenin kısa açıklaması

GOST 28147-89 - 1990'da tanıtılan simetrik şifreleme için Sovyet ve Rus standardı da bir CIS standardıdır. Tam adı "GOST 28147-89 Bilgi işleme sistemleri" dir. Kriptografik koruma. Kriptografik dönüşüm algoritması ". Şifreleme algoritmasını engelleyin. Şifreleme yöntemini gama ile kullanırken, bir akış şifreleme algoritmasının işlevlerini gerçekleştirebilir.

GOST 28147-89 - 64 bitlik bloklarda çalışan 256 bit anahtar ve 32 dönüştürme döngüsüne sahip blok şifresi. Şifreleme algoritmasının temeli Feistel ağıdır. GOST 28147-89 ile uyumlu temel şifreleme modu, basit değiştirme modudur (daha karmaşık gama, geri besleme gama ve taklit ekleme modları da tanımlanmıştır).

Algoritma nasıl çalışır?

Algoritma temelde DES'ten farklı değildir. Ayrıca Feistel şemasına göre (Şekil 2.9.) Şifreleme döngüleri (32 tanesi) vardır.

Şekil: 2.9. Şifreleme algoritması turları GOST 28147-89.

Alt anahtarlar oluşturmak için, orijinal 256 bit anahtar sekiz 32 bitlik bloğa bölünür: k 1 ... k 8. K9 ... k 24 anahtarları, k 1 ... k 8 (en önemsiz bitlerden en anlamlı olana kadar numaralandırılır) anahtarlarının döngüsel bir tekrarlamasıdır. K 25 ... k 32 tuşları, ters sırada k 1 ... k 8 tuşlarıdır.

Algoritmanın 32 turunun tamamı yürütüldükten sonra, bloklar A 33 ve B 33 birbirine yapıştırılır (en önemli bitin A 33 ve en az anlamlı bitin B 33 olduğuna dikkat edin) - sonuç algoritmanın sonucudur.

Fonksiyon f(Bir ben ,K ben) şu şekilde hesaplanır: A i ve K i, modulo 2 32 eklenir, ardından sonuç, her biri kendi girişine giden sekiz 4 bitlik alt dizilere bölünür. yedek tablo düğümü (bitlerin artan öncelik sırasına göre), aşağıda denir S bloğu... GOST S kutularının toplam sayısı sekizdir, yani alt diziler kadar. Her S bloğu 0'dan 15'e kadar sayıların bir permütasyonudur. İlk 4 bitlik alt sekans, birinci S-kutusunun girişine, ikincisi ikincinin girişine vb. gider. Sekiz S kutusunun tümünün çıktıları 32 bitlik bir kelime halinde birleştirilir, ardından tüm kelime döngüsel olarak kaydırılır. sola (en önemli bitlere) 11 bit. Sekiz S-box'ın tümü farklı olabilir. Aslında, ek anahtar materyal olabilirler, ancak daha sıklıkla belirli bir kullanıcı grubu için ortak olan bir şema parametresidirler. Standardın metni, yedek düğümlerin (S kutuları) doldurulmasının öngörülen şekilde yapıldığını gösterir, yani. algoritmanın geliştiricisi. Rus CIPF geliştiricileri topluluğu, İnternette kullanılan yedek düğümler üzerinde anlaştı.

Şifre çözme, şifreleme ile aynı şekilde gerçekleştirilir, ancak ki alt anahtarlarının sırası tersine çevrilir.

Algoritma işlem modları GOST 28147-89

GOST 28147-89 algoritmasının dört çalışma modu vardır.

1. Modbasit değiştirme boyutu 64 bitin katı olan verileri girdi olarak kabul eder. Şifrelemenin sonucu, "32-З" döngüsü ile şifreleme durumunda ve şifre çözme durumunda - "32-Р" döngüsü ile 64 bitlik bloklar halinde dönüştürülen girdi metnidir.

2. Modoyun herhangi bir boyuttaki veriyi girdi olarak ve ayrıca ek bir 64-bit parametre kabul eder - synchro paketi... İşlem sırasında, senkro-sinyal 32 W'lık bir döngüye dönüştürülür, sonuç iki kısma bölünür. İlk bölüm, 1010101 16 sabit değeriyle modulo 2 32 eklenir. İkinci kısım 2 32 -1'e eşitse, değeri değişmez, aksi takdirde 1010104 16 sabit değeri ile modulo 2 32 -1 eklenir. Şifrenin gamması olarak adlandırılan her iki dönüştürülmüş parçanın birleştirilmesiyle elde edilen değer "32-З" döngüsüne girer, sonucu 64 bitlik bir giriş verisi bloğu ile seri olarak eklenen modulo 2'dir. İkincisi 64 bitten azsa, alınan değerin ekstra bitleri atılır. Elde edilen değer çıktıya gönderilir. Hala gelen veri varsa, eylem tekrarlanır: 32 bitlik parçalardan oluşan bir blok parçalar halinde dönüştürülür vb.

3. Modgeri bildirimle oyun oynama ayrıca herhangi bir boyuttaki veriyi ve bir senkronizasyon paketini girdi olarak kabul eder. Giriş verisi bloğu, "32-W" senkronizasyon çerçevesindeki dönüşümün sonucu ile bitsel olarak eklenen modulo 2'dir. Elde edilen değer çıktıya gönderilir. Eşitleme mesajı değeri, şifreleme durumunda çıktı bloğu ile ve şifre çözme durumunda - giriş tarafından, yani şifrelenerek değiştirilir. Gelen verinin son bloğu 64 bitten az ise, o zaman ekstra gama bitleri ("32-W" çevriminin çıktısı) atılır. Hala gelen veriler varsa, eylem tekrarlanır: şifre gama, değiştirilen değerin şifreleme sonucundan oluşur, vb.

4. Üretim modutaklitler boyut olarak en az iki tam 64 bitlik blok olan girdi verilerini alır ve sahte ekleme adı verilen 64 bitlik bir veri bloğu döndürür. Geçici 64-bit değer, 0'a ayarlanır, daha sonra, giriş verisi olduğu sürece, girdisi bir girdi verisi bloğu olan "16-Z" döngüsünün yürütülmesi sonucu bitsel modulo 2 eklenir. Girişin bitiminden sonra, sonuç olarak geçici bir değer döndürülür.

Şifrenin kriptanalizi

GOST 28147-89 şifresi 256 bitlik bir anahtar kullanır ve anahtar alanının hacmi 2 256'dır. Şu anda var olan genel kullanım bilgisayarlarından hiçbiri, yüzlerce yıldan daha kısa bir sürede bir anahtar bulamaz. Rus standardı GOST 28147-89, büyük bir marjla tasarlanmıştır ve 56 bitlik gerçek anahtar boyutu ve yalnızca 266 anahtar alanıyla Amerikan DES standardından çok daha güçlüdür.

Ayrıca herhangi bir değişiklik yapılmadan tam kapsamlı GOST 28147-89'a saldırılar da var. Algoritmanın analizinin gerçekleştirildiği ilk açık çalışmalardan biri, bilinen bir dizi şifreleme algoritmasının anahtar genişletme prosedürünün zayıflıklarından yararlanır. Özellikle, tam kapsamlı GOST 28147-89 algoritması, bağlantılı anahtarlarda diferansiyel kriptanaliz kullanılarak kırılabilir, ancak yalnızca zayıf ikame tablolarının kullanılması durumunda. Algoritmanın 24 turluk versiyonu (ilk 8 turdan yoksun) herhangi bir oyuncu değişikliği tablosu için aynı şekilde açılır, ancak güçlü ikame tabloları bu tür bir saldırıyı tamamen kullanışsız hale getirir.

Yerli bilim adamları A.G. Rostovtsev ve E.B. Makhovenko, 2001 yılında, bilinen bir düz metin, karşılık gelen şifreli metin ve istenen anahtar değerden nesnel bir işlev oluşturarak ve gerçek anahtar değerine karşılık gelen uç noktasını bularak temelde yeni bir kriptanaliz yöntemi önerdi. Ayrıca, GOST 28147-89 algoritmasının geniş bir zayıf anahtar sınıfı buldular, bu da algoritmayı yalnızca 4 seçilmiş düz metin ve oldukça düşük karmaşıklığa sahip karşılık gelen şifreli metinler kullanarak kırmayı mümkün kıldı.

2004 yılında, Koreli bir grup uzman, ilişkili anahtarlarda diferansiyel kriptanaliz kullanarak,% 91,7 olasılıkla 12 bitlik gizli anahtar elde etmenin mümkün olduğu bir saldırı önerdi. Saldırı, 2 35 seçili düz metin ve 2 36 şifreleme işlemi gerektirir. Gördüğünüz gibi, bu saldırı, algoritmaya gerçek bir saldırı için pratik olarak yararsızdır.

Değiştirme tablosu uzun vadeli bir anahtar unsurdur, yani tek bir anahtardan çok daha uzun bir süre geçerlidir. Tek bir kriptografik koruma sistemi içindeki tüm şifreleme düğümlerinde ortak olduğu varsayılmaktadır. Şifrenin kalitesi bu tablonun kalitesine bağlıdır. "Güçlü" bir ikame tablosuyla, şifrenin gücü, açıklansa bile, izin verilen belirli bir sınırın altına düşmez. Tersine, "zayıf" bir tablo kullanmak, şifrenin gücünü kabul edilemeyecek kadar düşük bir sınıra indirebilir. Rusya'daki açık basında ikame tablosunun kalitesi hakkında hiçbir bilgi yayınlanmadı, ancak "zayıf" tabloların varlığı şüphe götürmez - bir örnek, her bir değerin kendisiyle değiştirildiği "önemsiz" ikame tablosudur. Bir dizi çalışmada, yanlışlıkla GOST 28147-89 algoritmasının gizli ikame tablolarının anahtarın bir parçası olabileceği ve etkin uzunluğunu artırabileceği (algoritmanın çok büyük bir 256-bit anahtara sahip olması nedeniyle önemsizdir) sonucuna varılmıştır.

GOST 28147-89 tarafından tanımlanan algoritmanın şifreleme anahtarı uzunluğu 256 bittir. Bilgileri 64 bitlik bloklar halinde (bu tür algoritmalar blok algoritmaları olarak adlandırılır) şifreler ve bunlar daha sonra 32 bitlik iki alt bloğa (N1 ve N2) bölünür (Şekil 1). Alt blok N1 belirli bir şekilde işlenir, daha sonra değeri alt blok N2'nin değerine eklenir (ekleme gerçekleştirilir modulo 2, yani mantıksal XOR işlemi uygulanır - "özel veya") ve ardından alt bloklar değiştirilir. Bu dönüşüm, algoritmanın çalışma moduna bağlı olarak belirli sayıda ("yuvarlama"): 16 veya 32 kez gerçekleştirilir. Her turda iki işlem yapılır.

Şekil 1. GOST 28147-89 algoritmasının şeması.

İlki, anahtar yer paylaşımıdır. N1 alt bloğunun içeriği, Kx anahtarının 32 bitlik kısmı ile modulo 2'ye eklenir. Tam şifreleme anahtarı, 32 bitlik alt anahtarların birleşimi olarak temsil edilir: K0, K1, K2, K3, K4, K5, K6, K7. Şifreleme işleminde, algoritmanın yuvarlak sayısına ve çalışma moduna bağlı olarak bu alt anahtarlardan biri kullanılır.

İkinci işlem masa değiştirmedir. Anahtar uygulandıktan sonra, N1 alt bloğu, her birinin değeri alt bloğun bu bölümü için değiştirme tablosuna göre değiştirilen 4 bitlik 8 parçaya bölünür. Alt blok daha sonra bitsel olarak 11 bit sola kaydırılır.

Değiştirme kutuları (S kutuları) genellikle modern şifreleme algoritmalarında kullanılır, bu nedenle böyle bir işlemin nasıl organize edildiğini açıklamaya değer. Blokların çıktı değerleri tabloya yazılır. Belirli bir boyuttaki bir veri bloğu (bizim durumumuzda 4 bit), çıktı değerinin sayısını belirleyen kendi sayısal temsiline sahiptir. Örneğin, S-box 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 gibi görünüyorsa ve 4 bitlik bir blok "0100" girdiye geldi (4 değeri), tabloya göre çıkış değeri 15 olacaktır, yani "1111" (0 a 4, 1 a 11, 2 a 2 ...).

GOST 28147-89 tarafından tanımlanan algoritma, dört çalışma modu sağlar: basit değiştirme, gama işlemi, geri besleme gama radyasyonu ve simülatör üretimi. Yukarıda açıklanan aynı şifreleme dönüşümünü kullanırlar, ancak modların amacı farklı olduğu için bu dönüşüm her birinde farklı şekillerde gerçekleştirilir.

Basit değiştirme modunda, her 64 bitlik bilgi bloğunu şifrelemek için yukarıda açıklanan 32 tur gerçekleştirilir. Bu durumda, 32 bitlik alt anahtarlar aşağıdaki sırayla kullanılır:

K0, K1, K2, K3, K4, K5, K6, K7, K0, K1, vb. - 1-24. Turlarda;

K7, K6, K5, K4, K3, K2, K1, K0 - 25'ten 32'ye kadar olan turlarda.

Bu modda şifre çözme aynı şekilde gerçekleştirilir, ancak biraz farklı bir alt anahtar kullanma sırası ile:

K0, K1, K2, K3, K4, K5, K6, K7 - 1'den 8'e kadar olan turlarda;

K7, K6, K5, K4, K3, K2, K1, K0, K7, K6, vb. - 9'dan 32'ye kadar olan turlarda.

Tüm bloklar birbirinden bağımsız olarak şifrelenir, yani her bloğun şifreleme sonucu yalnızca içeriğine bağlıdır (kaynak metnin karşılık gelen bloğu). Orijinal (düz) metnin birkaç özdeş bloğu varsa, karşılık gelen şifreli metin blokları da aynı olacaktır, bu da şifreyi kırmaya çalışan kriptanalist için ek yararlı bilgiler verir. Bu nedenle, bu mod esas olarak şifreleme anahtarlarının kendilerini şifrelemek için kullanılır (çoğu zaman, anahtarların bir dizi nedenden ötürü üst üste şifrelendiği çok anahtarlı şemalar uygulanır). Bilginin kendisini şifrelemek için, iki işlem modu daha vardır - gama ve geri besleme gama.

Gama modunda, her düz metin bloğu, 64-bit şifreli gama bloğu ile bitsel olarak modulo 2 eklenir. Gama şifresi, N1 ve N2 yazmaçları ile yapılan belirli işlemler sonucunda elde edilen özel bir dizidir.

  • 1. N1 ve N2 yazmaçlarında ilk doldurmaları yazılır - sync burst adı verilen 64 bitlik bir değer.
  • 2. N1 ve N2 kayıtlarının içeriğinin şifrelenmesi (bu durumda - mesajları senkronizasyon) basit değiştirme modunda gerçekleştirilir.
  • 3. N1 kaydının içeriği, sabit C1 \u003d 224 + 216 + 28 + 24 ile modulo (232 - 1) eklenir ve toplamanın sonucu N1 yazmacına yazılır.
  • 4. N2 kaydının içeriği, C2 \u003d 224 + 216 + 28 + 1 sabitiyle modulo 232 eklenir ve toplamanın sonucu N2 yazmacına yazılır.
  • 5. N1 ve N2 kayıtlarının içerikleri, şifreli gamanın 64 bitlik bir bloğu olarak çıkarılır (bu durumda, N1 ve N2 birinci gama bloğunu oluşturur).

Bir sonraki gama bloğuna ihtiyaç duyulursa (yani, şifreleme veya şifre çözme işlemine devam etmeniz gerekir), 2. adıma dönersiniz.

Şifre çözme için, gama benzer şekilde üretilir ve ardından XOR işlemi şifreli metne ve gama bitlerine tekrar uygulanır. Bu işlem tersine çevrilebilir olduğundan, doğru işlenmiş bir ölçek olması durumunda orijinal metin elde edilir (Tablo 1).

Tablo 1.Gama modunda şifreleme ve şifre çözme

Şifre çözme için gerekli şifre gamını oluşturmak için, şifresini çözen kullanıcı, bilgiyi şifrelemek için kullanılan aynı anahtara ve aynı eşzamanlı mesaj değerine sahip olmalıdır. Aksi takdirde orijinal metnin şifrelenmiş olandan alınması mümkün olmayacaktır.

GOST 28147-89 algoritmasının çoğu uygulamasında, senkronizasyon mesajı gizli değildir, ancak senkronizasyon mesajının şifreleme anahtarı ile aynı gizli öğe olduğu sistemler vardır. Bu tür sistemler için, algoritma anahtarının (256 bit) etkili uzunluğu, bir anahtar öğe olarak da düşünülebilecek olan gizli senkronizasyon mesajının başka bir 64 biti kadar artırılır.

Geri beslemeli gama modunda, 2. bloktan başlayarak N1 ve N2 kayıtlarını doldurmak için önceki gama bloğu değil, önceki düz metin bloğunun şifrelenmesi sonucu kullanılır (Şekil 2). Bu moddaki ilk blok, bir öncekine tamamen benzer şekilde oluşturulur.

Şekil 2. Geri besleme gama modunda şifre gamanın oluşturulması.

Simülatörlerin üretim şekli göz önüne alınarak, üretim konusu kavramı tanımlanmalıdır. Önek, mesajların bütünlüğünü doğrulamak için bir şifreleme anahtarı kullanılarak hesaplanan kriptografik bir sağlama toplamıdır. Bir önek oluştururken, aşağıdaki işlemler gerçekleştirilir: önekin hesaplandığı bilgi dizisinin ilk 64-bit bloğu, N1 ve N2 kayıtlarına yazılır ve basit değiştirme indirgenmiş kipinde şifrelenir (32'nin ilk 16'sı gerçekleştirilir). Elde edilen sonuç, sonuç N1 ve N2'de saklanarak, bir sonraki bilgi bloğu ile modulo 2 toplanır.

Döngü, son bilgi bloğuna kadar tekrar eder. N1 ve N2 kayıtlarının veya bunların bir kısmının bu dönüşümlerden kaynaklanan 64 bitlik sonuçlarına önek adı verilir. Ön ekin boyutu, gerekli mesaj güvenilirliğine göre seçilir: önek r bitlerinin uzunluğu ile, mesaj değişikliğinin fark edilmeden gitme olasılığı 2-r'dir.Çoğunlukla 32 bitlik bir önek kullanılır, yani kayıt içeriğinin yarısı. Bu yeterlidir, çünkü, herhangi bir sağlama toplamı gibi, simülatör, esasen bilgilerin yanlışlıkla bozulmasına karşı koruma sağlamak için tasarlanmıştır. Verilerin kasıtlı olarak değiştirilmesine karşı koruma sağlamak için, diğer kriptografik yöntemler kullanılır - öncelikle elektronik bir dijital imza.

Bilgi alışverişinde bulunurken, simülatör bir tür ek kontrol aracı görevi görür. Bazı bilgiler şifrelenip şifreli metinle birlikte gönderildiğinde düz metin için hesaplanır. Şifre çözüldükten sonra, gönderilenle karşılaştırılan yeni bir önek değeri hesaplanır. Değerler eşleşmiyorsa, bu, şifreli metnin iletim sırasında bozulduğu veya şifre çözme sırasında yanlış anahtarların kullanıldığı anlamına gelir. Önek, özellikle çoklu anahtar şemaları kullanılırken anahtar bilgilerinin doğru şifresinin çözülmesini kontrol etmek için kullanışlıdır.

GOST 28147-89 algoritması çok güçlü bir algoritma olarak kabul edilir - şu anda, açıklaması için yukarıda bahsedilen "kaba kuvvet" yönteminden daha etkili bir yöntem önerilmemiştir. Yüksek güvenliği, öncelikle büyük anahtar uzunluğu - 256 bit sayesinde elde edilir. Gizli bir senkronizasyon mesajı kullanıldığında, etkili anahtar uzunluğu 320 bite yükseltilir ve ikame tablosunun gizliliği ilave bitler ekler. Ek olarak, kriptografik güç, GOST 28147-89'a göre 32 olması gereken dönüşüm turlarının sayısına bağlıdır (giriş verilerinin dağılımının tam etkisi 8 turdan sonra elde edilir).

GOST 28147-89'un avantajları, yanlış verilerin empoze edilmesine (bir taklit ekin geliştirilmesi) ve dört GOST algoritmasının tümünde aynı şifreleme döngüsüne karşı korumanın varlığıdır.

Kamu tarafından bilinen "işlemci performansı" terimi, floplarla ölçülen objektif, hesaplanmış bir parametredir. Bununla birlikte, çoğu bunu gigahertz ile ölçüyor, safça bunun bir ve aynı olduğuna inanıyor. "Kod performansı" terimini kimse bilmiyor ve nedenini hemen açıklayacağım.

Nedeni, onu daha yeni buldum ve henüz kimseye söylemedim. Ancak, işlemci performansı gibi kod performansı da ölçülebilen nesnel özelliklere sahiptir. Bu makale özellikle işlemci çekirdeği tarafından yürütülen kodun performansı hakkındadır.

Kod performansı nasıl ölçülür? Bunun hakkında ilk konuşan ben olduğum için, kaşifin sağında onu RTT-shkakh ile ölçeceğim;).

Şimdi cidden. Modern işlemcilerde, ana dönüşümler 32 bitlik sayılar üzerindeki eylemlerdir, geri kalan her şey genellikle egzotiktir. Bu nedenle, ana şeyi dikkate alacağız - 32 bit sayılarla işlemler. Modern bir işlemci çekirdeğinin aynı anda kaç tane 32-bit işlemi gerçekleştirebileceğini düşünüyorsunuz?

Öğrenci cevap verecektir - bir, öğretmeni düşünecek ve dört, bir profesyonel olduğunu söyleyecek - şimdiye kadar sadece on iki işlem var.

Bu nedenle, kodun tüm yürütme süresi boyunca tüm işlemci yürütme aygıtlarını aynı anda yükleyen program kodu, 12 RTT şekel performansına sahip olacaktır. Maksimum! Dürüst olmak gerekirse daha önce hiç böyle bir kod yazmadım ama bu yazımda kendim için çaba göstermeye çalışacağım.

On iki 32-bit işlemin eşzamanlı yürütülmesiyle kodun mümkün olduğunu kanıtlayacağım

İşlemci çekirdeğinde bir yürütme birimi kullanan bir program kodu, doğal olarak 1 RTT performansına sahip olacaktır. Üst düzey dil derleyicileri ve sanal makine yorumlayıcıları tarafından üretilen programlar, bu tür kod performansıyla "övünebilir". İşletim Sistemi Görev Yöneticisinde görülen CPU kullanımı metriğinin, kod verimliliğinin objektif bir ölçüsü olabileceğini varsaymayın. İşlemci çekirdek yükü% 100 olabilir, ancak program kodu içinde bir yürütme aygıtı kullanacaktır (performans 1 RTT). Bu durumda,% 100 yükte işlemci çekirdeği maksimum performansının 1 / 12'sinde çalışacaktır. Başka bir deyişle, Windows Görev Yöneticisi'nde maksimum CPU kullanımı gösterildiğinde, gerçek performansı 1 ila 12 RTT arasında değişebilir. Performans penceresinde herhangi bir işlemci çekirdeğinde% 100 yük gördükten sonra, tüm yönetici cihazların bu çekirdekte çalıştığını varsaymak kesinlikle yanlıştır!

Bir işlemci çekirdeğinin çalışmasını maksimum performansla dolaylı olarak değerlendirmek için tek kriter, güç tüketimi ve sonuç olarak soğutucunun gürültüsüdür. Şimdi, soğutucu gürültülü ise, o zaman evet - yük maksimum seviyeye çıktı. Ancak, genel kavramlarla bitmenin ve sert uygulamalara geçmenin zamanı geldi.

GOST 28147-89'un geleneksel uygulaması

Bilgi güvenliği uzmanı değilim, ancak şifreleme konusuna hala aşinayım. Özellikle çok saygı duyduğum profesyonel bir kriptografla konuşarak simetrik akış şifrelemesine odaklanmak için ilham aldım. Ve bu konuyu ele aldığım için, tam olarak iyi yapmaya çalıştım ve sadece iyi değil, aynı zamanda hızlı bir şekilde, birim zaman başına maksimum işlem sayısını gerçekleştirdim. Diğer bir deyişle, maksimum RTT değeri ile program kodu yazma görevi ile karşı karşıya kaldım.

GOST 28147-89'a göre kriptografik dönüşüm, iletişim kanallarında ve disk sürücülerinde bilgilerin akış şifrelemesi için kullanılır.

Şu anda, bu GOST'un merkezi işlemcinin RON'undaki yazılım uygulaması yaygın olarak kullanılmaktadır. İyi bilinen GOST uygulama yöntemlerinde, tüm gizli bilgiler (şifreleme anahtarları, yedek bloklar) RAM'de bulunur. Bu, şifrelemenin güvenilirliğini azaltır, çünkü ana belleğin bir dökümüne sahip olarak, kripto dönüşümünün tüm gizli unsurlarını tam olarak ortaya çıkarmak mümkündür. Ek olarak, yöntem, OP'deki ana kripto dönüştürme nesnelerinin konumu ve ALU aktüatörlerinin eksik yüklenmesi nedeniyle hız sınırlamalarına sahiptir. İyi bilinen bir yönteme göre bir kripto prosedürü uygulayan modern işlemciler, saniyede 40-60 megabaytlık bir şifreleme hızı sağlayabilir. Ve bunu gerçekten sonuna kadar anlarsak, kripto dönüşümünün düşük performansının ve zayıf güvenliğinin nedeni ikame bloğunun yazılım uygulamasıdır. GOST'deki açıklaması için bkz. 1.

GOST Madde 1.2'ye göre, bu blok 32 bitlik bir sözcükte tetrad (dört bitlik) permütasyonları uygular, ancak x86 / 64 işlemcisinin mimarisi ve onun talimat sistemi tetradları etkili bir şekilde işleyemez.

İkame bloğunun yazılım uygulaması için kripto fonksiyonunun başlatılması aşamasında hazırlanan özel RAM tabloları kullanılır. Bu tablolar, bitişik tetradların değiştirme düğümlerini 8x8 bitlik bayt tablolarında birleştirir, böylece dört 256 baytlık tablo RAM'de bulunur.

Daha gelişmiş uygulamalarda, bu tabloların boyutu 1.024 bayttır (dört baytlık 256 kelime). Bu, tablolarda, ikame işleminin bir sonucu olarak elde edilen 32 bitlik sözcüğün ek bir 11 konumlu döngüsel kaymasını (GOST'a göre dönüştürme algoritmasının bir sonraki işlemi) uygulamak için yapılır. Bu yönteme göre GOST uygulamasının bir örneği Ek 1'de (diskte) gösterilmiştir.

İkame blok bilgisi, kripto işlevinin gizli bileşenidir (GOST'de formüle edildiği gibi, bkz. Şekil 2).

Bu tabloların OP'deki ikame bloğunun anahtarlarıyla yerleştirilmesi, bilgisayar kurulumunda çalışan üçüncü taraf programlara gizli bilgiler sağlandığından GOST gereklilikleriyle çelişir (madde 1.7). GOST'a uygun olarak şifreleme yazılım uygulamalarını da onaylayan FSB, hafif, küçümseyici bir şekilde bu ihlale bakar. FSB, anahtarları OP'ye yerleştirmek için hala bir "incir yaprağı" gerektiriyorsa - XOR işlemi ile anahtarları maskelemek, OP'deki yedek bloklar için hiçbir şey gerekmez, bunlar açık formda saklanır.

Kısacası, FSB, böyle bir çözümün gücündeki bariz düşüşe ve GOST'a göre kendi gereksinimlerinin doğrudan ihlaline rağmen, kripto prosedürünün bu tür yazılım uygulamalarını atlar (madde 1.7). Ve bu, bir hafıza dökümü okuyarak şifreleri kırmanın iyi bilinen yöntemlerine rağmen ...

İşlemcinin dahili kayıtlarında anahtarların ve yedek blokların depolanması konusuna biraz sonra döneceğiz (güzel ve hızlı bir çözüm var), ancak şimdilik yalnızca şifreleme anahtarlarını MMX kayıtlarında saklayacağız, bu daha güvenilir.

Ancak şarkı sözlerinin yeterli olması, bu program kodunun 1 RTT performansa sahip olması dikkate alınan konu çerçevesinde önemlidir. Şimdi 2 RTT performansına sahip bir kod yazalım.

GOST 28147-89'un çok iş parçacıklı uygulaması

Bilinen algoritmada kripto prosedürlerini hızlandırmanın tek yolu, multithreading'in tanıtılmasıdır. Algoritmanın uygulanmasındaki böyle bir değişikliğin anlamı, birkaç veri bloğunu paralel olarak hesaplamaktır.

Çoğu programcı, yalnızca paralel işlemle, bellekteki kesintiler ve semaforlar aracılığıyla senkronize edilen birkaç işlemci çekirdeğinin çalışmasını kastediyor.

Bununla birlikte, tek bir işlemci çekirdeği üzerinde paralel veri işlemenin başka bir çeşidi vardır. Bu apaçık olmayan fikri açıklamama izin verin.

Modern işlemciler en az iki veya hatta üç ila altı aritmetik mantık cihazı içerir. Bu ALU'lar (FPU'lar, adres aritmetik birimleri vb.) Birbirlerinden bağımsız olarak çalışabilirler, paralel işlemlerinin tek koşulu, birlikte çalıştıkları örtüşmeyen yazılım nesneleridir. Başka bir deyişle, ALU'yu eşzamanlı olarak çalıştıran komutlarda, bellek adresleri ve kayıt numaraları farklı olmalıdır. Veya, çeşitli işlemci yürütme birimleri tarafından erişilen genel kayıtlara ve bellek adreslerine hiçbir yazma işlemi olmamalıdır.

Tüm ALU'ların işlerinin yüklenmesi, işlemci çekirdeği içindeki özel bir donanım birimi tarafından kontrol edilir - yürütülebilir kodu ileri 32-64 bayt derinliğe kadar tarayan programlayıcı. Zamanlayıcı, ALU üzerinde çakışma olmadan çalıştırılabilen komutları algılarsa, bunları aynı anda farklı yürütme cihazlarında çalıştırır. Bu durumda, yürütülen komutların sayacı çalıştırılabilir komutu gösterir (böyle bir şemada bunlardan birkaç tane vardır), bundan sonra tüm komutlar zaten yürütülmüştür.

Otomatik olarak (derleyiciler tarafından) oluşturulan program dizilerinin çoğu, işlemci çekirdeğinde bulunan tüm ALU'ları ve FPU'ları yükleyemez. Bu durumda, işlemci donanımı boştadır ve sonuçta ortaya çıkan performansı önemli ölçüde azaltır. İşlemci geliştiricileri bunu anlar ve donanım tam olarak kullanılmadığında çekirdek frekansı artırma modları sunar. Hypertrading sistemleri de bunun için tasarlanmıştır ve bu sistemi gelecekte kodu maksimuma "sıkıştırmak" için kullanacağım.

Derleyiciler, hatta en iyileştirilmiş olanlar ve hatta daha fazlası - sanal makine motorları, performans açısından optimize edilmiş kod üretemezler. Yalnızca mühendislik bilgisine sahip bir programcı bu kadar optimize edilmiş bir kod yazabilir ve bu kodu yazma aracı yalnızca bir derleyicidir.

Bir işlemci çekirdeği üzerinde birkaç bağımsız program iş parçacığı yürütme olasılığının tipik bir örneği, tek bir işlemci çekirdeğinde iki iş parçacığı halinde yürütülen GOST uygulamasıdır. Kodun arkasındaki fikir basittir: Şifreleme / şifre çözme için iki veri bloğu vardır, ancak dönüşümü gerçekleştirecek bir işlemci çekirdeği vardır. Bu iki veri bloğunu sıralı olarak dönüştürmek mümkündür ve bu şimdiye kadar yapılmıştır. Bu durumda, dönüşümleri tamamlamak için gereken süre iki katına çıkar.

Ancak farklı şekilde hareket edebilirsiniz: farklı veri bloklarının işlenmesiyle ilgili alternatif komutlar. Bu seçenekler, Şekil 2'de grafik olarak gösterilmiştir. 3.


Şekilde, üstteki örnek, iki bağımsız veri bloğunu işlemenin olağan sırasını göstermektedir. İlk blok önce işlenir, ardından işlemci ikinci bloğu işlemeye devam eder. Doğal olarak ortaya çıkan süre, bir bloğu işlemek için gereken sürenin iki katına eşittir ve işlemci çekirdeğinin yürütme birimleri tam olarak yüklenmez.

Aşağıda, farklı işlem evrelerinden gelen komutların serpiştirilmesine bir örnek verilmiştir. Bu durumda, farklı veri bloklarıyla ilgili komutlar araya eklenir. Programlayıcı, komutları birbirinden bağımsız olarak seçer ve bunları yürütülmesi için ALU1 ve ALU2'ye aktarır. Bu ALU'lar üzerindeki birinci ve ikinci akışların komutlarının gruplandırılması otomatik olarak gerçekleştirilir, çünkü komutların aynı yürütme cihazındaki ortak verilere göre gruplandırılması programlayıcının algoritmasına dahil edilir.

Böyle bir program kodunun ALU kesinti olmadan çalışması için, her program iş parçacığının kendi kayıt kümesiyle çalışması gerekir. Bu şemadaki önbellek bir darboğaz haline gelir (yalnızca iki veri çıkış bağlantı noktasına sahiptir), bu nedenle anahtarları MMX kayıtlarında saklıyoruz. Bu durumda bellekteki değiştirme (ve kayma) düğümleri yalnızca okunduğundan, her iki program dizisi için ortak olabilirler.

Bu, elbette, program iş parçacıklarının tek bir çekirdekte paralel yürütülmesi ilkesinin çok basitleştirilmiş bir açıklamasıdır, gerçekte her şey çok daha karmaşıktır. Pratikte, yönetici cihazların boru hattı mimarisini, önbelleğe ve RON kayıt bloğuna eşzamanlı erişim kısıtlamalarını, adres aritmetik düğümlerinin varlığını, anahtarları ve çok daha fazlasını hesaba katmanız gerekir ... Yani bu, bir yandan sayılabilecek profesyoneller için bir konudur ...

Paralel şifreleme yöntemi, yalnızca işlemcinin çalışmasının 64 bit modu için etkili bir şekilde uygulanır, çünkü bu modda yeterli sayıda RON vardır (16'ya kadar!). Bu yönteme göre GOST uygulamasının bir örneği Ek 2'de (diskte) gösterilmiştir.

GOST'un bu uygulamasının 2 RTT-shki kodunun performansına sahip olduğu açıktır. Şimdi bunun çalışma zamanını nasıl etkilediğini görelim.

Bir akış için şifreleme döngüsü (Ek 1) 352 döngüdür ve bu süre zarfında 8 bayt veri hesaplanır; GOST'un iki iş parçacıklı uygulaması için (Ek 2) 416 işlemci döngüsü gerekir, ancak 16 bayt hesaplanır. Böylece, sonuçta ortaya çıkan dönüştürme hızı 3,6 GHz işlemci için 80'den 144 megabayta çıkarılır.

İlginç bir resim elde edildi: kod tam olarak iki kat daha fazla komut içeriyor ve yürütmesi yalnızca% 15 daha uzun sürüyor, ancak okuyucuların bu fenomenin nedenini zaten anladığını düşünüyorum ...

Teorik olarak, ikinci örnekteki kod, ilk örnekteki kodla aynı sayıda döngüde yürütülmelidir, ancak zamanlayıcı düğümü Intel mühendisleri tarafından geliştirilir, ancak aynı zamanda insanlar ve hepimiz mükemmel olmaktan uzağız. Dolayısıyla, yaratılışlarının etkinliğini değerlendirme fırsatı var. Bu kod AMD işlemcide de çalışacak ve sonuçlar karşılaştırılabilir.

Birisi benim sözümü almazsa, o zaman bu tür inançsızlar için, döngü sayaçlarına sahip test programları diske eklenir. Programlar kaynak kodlarda, doğal olarak montajda, bu yüzden sözlerimi kontrol etme ve aynı zamanda profesyonel kodlamanın bazı hilelerini gözetleme fırsatı var.

GOST 28147-89'un uygulanması için modern işlemcilerin SSE kayıtlarını ve AVX komutlarını kullanma

X86 / 64 mimarisinin modern işlemcileri, bir dizi 16 baytlık SSE kaydı ve bu kayıtlarda çeşitli işlemleri gerçekleştirmek için özel FPU'lar (en az iki) içerir. GOST'u bu ekipmana uygulamak mümkündür ve bu durumda, yedek düğümler RAM'deki tablolar biçiminde değil, doğrudan özel SSE kayıtlarına yerleştirilebilir.

Bir SSE kaydına 16 satırlık iki tablo yerleştirilebilir. Bu nedenle, dört SSE kaydı, tüm değiştirme tablolarını tamamen barındırmanıza izin verecektir. Böyle bir düzenleme için tek koşul, bir baytlık tetradların farklı SSE kayıtlarına yerleştirilmesi gerektiğine göre serpiştirme gereksinimidir. Ek olarak, giriş baytlarının düşük ve yüksek bitlerinin sırasıyla SSE kayıtlarının daha düşük ve daha yüksek bitlerine yerleştirilmesi tavsiye edilir.

Bu gereksinimler, mevcut AVX komut setinin optimizasyonu ile belirlenir. Bu nedenle, SSE yazmacının her bir baytı, ikame bloğunun giriş yazmacının farklı baytlarına karşılık gelen iki tetrad içerirken, baytın SSE kaydı üzerindeki konumu, ikame bloğunun ikame tablosundaki indekse benzersiz bir şekilde karşılık gelir.

SSE kayıtlarındaki olası yedek düğüm konumlarından birinin bir diyagramı Şekil 2'de gösterilmektedir. 4.


İkame düğümlerinin gizli bilgilerinin SSE kayıtlarına yerleştirilmesi kripto prosedürünün güvenliğini arttırır, ancak aşağıdaki koşullar karşılanırsa bu gizli bilgilerin tamamen izole edilmesi mümkündür:

  • İşlemci çekirdeği hiper yönetici ana bilgisayar moduna getirildi ve kesme bloğu (APIC) zorla devre dışı bırakıldı. Bu durumda, işlemci çekirdeği işletim sisteminden ve bilgi işlem tesisinde çalışan uygulamalardan tamamen izole edilmiştir.
  • SSE kayıtlarının yüklenmesi ve hesaplama çekirdeğinin yalıtılması, işletim sistemi başlatılmadan önce gerçekleştirilir; bu prosedürleri güvenilir önyükleme modülünden (TLS) yürütmek en uygunudur.
  • GOST'a uygun kripto prosedür programları, bir bilgi işlem cihazının değiştirilemez bir bellek alanında (BIOS'ta veya MDZ'nin flash belleğinde) bulunur.

Bu gereksinimlerin yerine getirilmesi, kripto prosedürlerinin program kodunun ve bunlarda kullanılan gizli bilgilerin tam izolasyonunu ve değişmezliğini garanti etmeyi mümkün kılacaktır.

Tetradların SSE kayıtlarından verimli örnekleme için, FPU'larda bulunan çok girişli bayt anahtarları kullanılır. Bu anahtarlar, özel bir SSE indeks kaydında bulunan indeksleri kullanarak herhangi bir kaynak bayttan herhangi bir hedef bayta transferlere izin verir. Ayrıca, paralel olarak, aktarım, SSE-yazmacı-alıcısının 16 baytı için gerçekleştirilir.

SSE yazmaçlarında ikameleri depolamak için düğümlere ve FPU'larda bir çoklu giriş anahtarına sahip olarak, bir ikame biriminde aşağıdaki dönüşümü organize edebiliriz (Şekil 5).

Bu şemada, her bir tetraddaki giriş yazmacı karşılık gelen anahtarın adresini ayarlar ve bu anahtar, bilgileri yedek düğümlerin sürücülerinden veri yolu aracılığıyla çıkış yazmacına aktarır. Bu şema üç şekilde organize edilebilir:

  • Uygun bir çip tasarımı oluşturmak için, ancak bu bizim için harika.
  • Mikro kodu yeniden programlamak ve bu işlevi mevcut işlemcilerde uygulamak için kendi işlemci talimatınızı oluşturmak artık bir fantezi değil, ancak maalesef mevcut koşullar altında gerçekçi değil.
  • Resmi AVX komutları üzerine bir program yazın. Seçenek, çok etkili olmasa da, "burada ve şimdi" uygulayacağız. Yani bundan sonra yapacağımız şey bu.

Anahtarların çalışması, özel bir üç adresli komut olan AVX VPSHUFB ile kontrol edilir. İlk işlenen, anahtarlardan gelen bilgilerin alıcısıdır, ikincisi, anahtar girişlerinin bağlı olduğu kaynaktır. Üçüncü işlenen, her baytı karşılık gelen bir anahtarla ilişkilendirilen anahtarlar için bir kontrol yazmacıdır; içindeki değer, anahtarın bilgileri okuduğu yön numarasını belirtir. Resmi Intel belgelerinden bu komutun bir açıklaması için bkz. 5. Şek. Şekil 6, bu komutun çalışmasının bir diyagramını gösterir - SSE kayıtlarının sadece yarısı gösterilir, ikinci yarı için her şey aynıdır.


Anahtar, anahtarlama yönünü belirlemek için yalnızca en az önemli dört biti kullanır, her bayttaki son bit, karşılık gelen alıcı baytını zorla temizlemek için kullanılır, ancak bu anahtar işlevi, bizim durumumuzda henüz gerekli değildir.

FPU anahtarları aracılığıyla bir dizi dizüstü bilgisayar içeren bir program yazıldı, ancak onu uygulamaya koymaya bile başlamadım - çok acıklıydı. 128 bit boyutunda bir register'a sahip olmak ve içinde sadece 32 bit kullanmak profesyonelce değildir.

"Sonumuz ufuktur" dediği gibi, bu şekilde sıkıştırın ... sıkıştırıp torbalara koyacağız!

Bu, kelimeler üzerinde bir oyun değil, sert bir FPU gerçeğidir - SSE kayıtları eşit parçalara bölünebilir ve aynı dönüşümler bu parçalar üzerinde tek bir komutla gerçekleştirilebilir. İşlemcinin bunu anlaması için, anımsatıcı komutun önüne yerleştirilmiş bir paket olan sihirli bir "P" harfi vardır ve sonuna yerleştirilen ve bildiren sihirli "Q", "D", "W", "B" harfleri daha az değildir. SSE kayıtlarının bu komutta hangi kısımlara bölündüğü.

SSE yazmacı dört adet 32-bit bloğa bölünen toplu mod ile ilgileniyoruz; buna göre, tüm komutların başına "P" ve sonunda - "D" karakteri eklenecektir. Bu, bir işlemci komutuyla aynı anda 32 bitlik dört bloğu aynı anda işlemeyi, yani dört veri bloğunu paralel olarak hesaplamayı mümkün kılar.

Bu yöntemi uygulayan bir program, Ek 3'te aynı yerde, tüm açıklamalarla mevcuttur.

Ancak, bu yüzden basın! Modern işlemcilerin en az iki FPU'su vardır ve bunları tam olarak yüklemek için iki bağımsız komut akışı kullanılabilir. Bağımsız akışlardan komutları doğru şekilde değiştirirseniz, her iki FPU'yu da işle yükleyebilir ve aynı anda sekiz paralel veri akışı elde edebilirsiniz. Böyle bir program yazılmıştır ve bunu Ek 4'te görebilirsiniz, ancak dikkatlice bakmanız gerekir - çıldırabilirsiniz. Bu, dedikleri gibi, "kod herkes için değildir ...".

Sorun fiyatı

Yedek düğümleri depolamak için SSE kayıtlarının kullanılması anlaşılabilir bir durumdur - gizli bilgilerin izolasyonu için belirli bir garanti sağlar, ancak kripto işlevinin FPU'da hesaplanmasının anlamı açık değildir. Bu nedenle, dört ve sekiz akış için GOST'a uygun olarak doğrudan değiştirme yöntemini kullanarak standart prosedürlerin uygulama süresini ölçtük.

Dört iş parçacığı için 472 işlemci döngüsünün yürütme hızı elde edildi. Bu nedenle, 3.6 GHz frekanslı bir işlemci için saniyede 59 megabayt hızında bir iş parçacığı ve saniyede 236 megabayt hızında sırasıyla dört iş parçacığı kabul edilir.

Sekiz iş parçacığı için 580 işlemci döngüsünün yürütme hızı elde edildi. Böylece 3.6 GHz'lik bir işlemci için saniyede 49 megabaytta bir iş parçacığı ve saniyede 392 megabaytta sekiz iş parçacığı sayılır.

Okuyucunun görebileceği gibi, örnek 3'teki kod 4 RTT'lik bir verime sahiptir ve örnek # 4'teki kod, 8 RTT'lik bir iş hacmine sahiptir. Bu örneklerde, SSE yazmaçlarında, desenler RON kullanılırkenki ile aynıdır, sadece programlayıcı, verimliliğini düşürmüştür. Artık kod uzunluğunda 2 kat artışla% 20 oranında bir artış sağlıyor.

Dahası, bu sonuçlar hem Intel hem de AMD işlemcilerde bulunan evrensel AVX komutları kullanılarak elde edildi. AMD işlemci için optimize ederseniz, sonuç çok daha iyi olacaktır. Bu eğilime aykırı geliyor, ancak yine de doğru ve işte nedeni: AMD işlemcilerin XOP uzantısı denen ek bir komut seti var ve bu ek komut seti GOST algoritmasının uygulanmasını büyük ölçüde basitleştiren bazılarını içeriyor.

Bu, mantıksal çoğuşma bayt kaydırma ve çoğuşma döngüsel çift sözcük kaydırma talimatlarını ifade eder. Ek 3 ve 4'te verilen örnekler, gerekli dönüşümü uygulayan bir dizi evrensel komut kullanır: ilk durumda, bir "ekstra" komut ve diğer durumda, aynı anda dört ekstra komut. Yani optimizasyon için rezervler var ve önemli.

Daha fazla optimizasyondan bahsediyorsak, hesaplamaların hızını teorik olarak ikiye katlayabileceğiniz 256 bitlik kayıtların (YMM kayıtları) varlığını hatırlamakta fayda var. Ancak bu sadece bir bakış açısı olsa da, şu anda işlemciler 256 bit komutları çalıştırdıklarında çok yavaşlıyorlar (FPU'lar 128 bitlik bir yol genişliğine sahiptir). Deneyler, modern işlemcilerde YMM kayıtlarında 16 iş parçacığı saymanın bir kazanç sağlamadığını göstermiştir. Ancak bu sadece şimdilik, yeni işlemci modellerinde, 256-bit komutların hızı şüphesiz artacak ve daha sonra 16 paralel iş parçacığının kullanılması uygun hale gelecek ve kripto prosedürünün hızında daha da büyük bir artışa yol açacaktır.

Teorik olarak, işlemcide her biri 256 bit çalışma yolu genişliğine sahip iki FPU varsa saniyede 600-700 megabaytlık bir hıza güvenebilirsiniz. Bu durumda 16 RTT verimi ile kod yazmaktan bahsedebiliriz ve bu bir fantezi değil, yakın gelecek.

Karışık mod

Yine, yazmaç sayısı sorusu ortaya çıkıyor, böyle bir algoritmayı döndürmek için yeterli değiller. Ancak hiper ticaret modu bize yardımcı olacaktır. İşlemci çekirdeği, mantıksal işlemci modunda kullanılabilen ikinci bir kayıt grubuna sahiptir. Bu nedenle, aynı kodu iki mantıksal işlemcide aynı anda çalıştıracağız. Bu modda, elbette yönetici cihazları eklemeyeceğiz, ancak değişim nedeniyle, tüm yönetici cihazlarının tam bir yükünü alabiliriz.

% 50'lik bir artışa güvenmeye gerek yoktur, teknolojik maskelerin depolandığı önbellek bir darboğaz haline gelir, ancak yine de 100 megabaytlık bir artış elde edilebilir. Bu seçenek eklerde gösterilmez (makrolar 8 RTT kodunda kullanılanlara benzer), ancak program dosyalarında mevcuttur. Dolayısıyla, herhangi biri bir işlemci çekirdeğinde saniyede 500 megabayt hızında şifreleme olasılığına inanmıyorsa, test dosyalarını çalıştırmasına izin verin. Ayrıca yorum içeren metinler de var, böylece kimse benim dağıldığımı düşünmesin.

Bu odaklanma yalnızca Intel işlemcilerde mümkündür, AMD'nin iki işlemci modülü için yalnızca iki FPU'su vardır (hiper işlem moduna benzer). Ama sonra, kullanılmaması günah olan dört ALU daha var.

Bulldozer'in işlemci modüllerini hiper işlem moduna benzer bir moda sürdürebilirsiniz, ancak dönüşümü bir iş parçacığındaki farklı modüllerde ve başka bir iş parçacığındaki SSE kayıtlarında RON üzerinde çalıştırıp aynı 12 RTT'yi elde edebilirsiniz. Bu seçeneği test etmedim ancak 12 RTT kodunun AMD üzerinde daha verimli çalışacağını düşünüyorum. İlgilenenler deneyebilir, test programları "Buldozerler" üzerinde kolayca çalışacak şekilde ayarlanabilir.

Kimin ihtiyacı var?

Ciddi bir soru, ancak basit bir cevabı var - herkesin buna ihtiyacı var. Yakında hepimiz bulutların üzerine oturacağız, hem verileri hem de programları orada depolayacağız ve orada, oh, kendi özel köşenizi nasıl donatmak istiyorsanız. Bunu yapmak için trafiği şifrelemeniz gerekecek ve kripto dönüşümünün hızı bulutta rahat bir çalışma için ana belirleyici faktör olacaktır. Şifreleme algoritması seçimimiz küçüktür - GOST veya AES.

İşin garibi, işlemcilerdeki yerleşik AES şifrelemesinin çok daha yavaş olduğu ortaya çıkıyor, testler hızı saniyede 100-150 megabayt düzeyinde gösteriyor ve bu, algoritmanın donanım uygulamasıyla! Sorun, tek iş parçacıklı sayımda ve baytlar üzerinde çalışan ikame bloğunda (256 satırlık bir tablo) yatmaktadır. Yani GOST'un x86 / 64 mimarisinde uygulamada daha verimli olduğu ortaya çıktı, kim düşünebilirdi ki ...

Bu, elde edilen şifreleme hızı seviyesi hakkında konuşursak olur. Ve kodun verimliliğini artırma alanındaki teorik karmaşıklığı aklımızda tutarsak, büyük olasılıkla kimsenin buna ihtiyacı yoktur. Seviye 3–6 RTT'de neredeyse hiç uzman yoktur, derleyiciler genellikle 1–2.5 RTT düzeyinde kod üretirler ve programcıların çoğu assembler'ı bilmez ve yazımını bilseler bile, modern bir işlemcinin cihazını anlamazlar. Ve bu bilgi olmadan montajcı, bir tür SI-keskin - fark yok.

Ancak her şey o kadar üzücü değil: Bir hafta uykusuz gecelerin ardından "sonuçta", patentlenmemesi günah olan GOST'un uygulanması için yeni bir algoritma var. Ve patent başvuruları (üç adede kadar) zaten yapıldı ve sunuldu, bu yüzden beyler, işadamları, sıraya girin - kadınlar ve çocuklar indirim alıyor.

Bilgi güvenliği görevleri

Test 2 için görevler

Ödev örnekleri 3

Ek A. Şifreleme algoritması GOST 28147-89 10

Ek B. Kiril Sembolleri

(alternatif ASCII kod tablosu) 13

Ek B. Şifreleme algoritmasında ikame bloğu

GOST 28147-89 14

Ek D.RSA 15 Şifreleme Algoritması

Ek E. Asal Tablo 17

Ek E. Hash İşlevi 18

Ek G.Elektronik dijital imza 19

Test Soruları 21

Edebiyat 22

1 numaralı problem. Sezar şifresi.

Sezar şifresini kullanarak verilerinizi şifreleyin: Soyadı Adı Soyadı Patronimik.

Problem numarası 2. GOST 28147-89 şifreleme algoritması.

Basit değiştirme modunda GOST 28147 89 şifreleme algoritmasının ilk döngüsünü gerçekleştirin. Orijinal metnin 64 bitini almak için verilerinizden ilk 8 harfi kullanın: Soyadı, İkinci adı. Anahtarı (256 bit) elde etmek için 32 harften oluşan bir metin kullanın. İlk alt anahtar, ilk 4 harfi içerir.

Problem numarası 3. Rsa şifreleme algoritması.

İlk yüzden p ve q asal sayılarını seçerek RSA şifreleme algoritmasında genel ve özel anahtarlar oluşturun. Adınızın baş harflerinden oluşan mesajı şifreleyin: tam ad.

Problem numarası 4. Özet fonksiyonu.

Karma işlevini kullanarak soyadınızın karma görüntüsünü bulun, burada n \u003d pq.

5 numaralı sorun. Elektronik dijital imza.

Ödev örnekleri

1 numaralı problem. Sezar şifresi... Sezar şifresini kullanarak verilerinizi şifreleyin: Soyadı Adı Soyadı Patronimik.

Orjinal metin:

« KOZİNA GALİNA LEONIDOVNA »

33 harf içeren bir alfabe ve I harfinden sonra bir boşluk kullanıyoruz:

ABVGDEEZHZYKLMNOPRSTUFHTSZHSCHYEUYA uzay

Sezar şifresindeki anahtar 3 rakamıdır. Orijinal metindeki her harf alfabetik olarak 3 pozisyon kaydırılır. Böylece şunu elde ederiz:

Orjinal metin

LEONIDOVNA

Şifreleme metni

OZSRLZHSERG

Problem numarası 2. Şifreleme algoritması GOST 28147-89.Basit değiştirme modunda GOST 28147-89 şifreleme algoritmasının ilk döngüsünü gerçekleştirin. Orijinal metnin 64 bitini almak için, verilerinizden ilk 8 harfi kullanın: Soyadı, İkinci adı. Anahtarı (256 bit) elde etmek için 32 harften oluşan bir metin kullanılır. İlk alt anahtar, ilk 4 harfi içerir.

Şifreleme için ilk veriler: KOZINA G

Anahtar için 32 harflik bir sıra alalım:

ALINA mantar toplamaya ormana gitti

İlk alt anahtar X için, anahtarın ilk 4 harfini kullanırız: ALIN.

Kaynak metni ve ilk alt anahtarı ikili bir diziye çeviriyoruz (bkz.Ek B):

orjinal metin

ilk alt anahtar X0

Böylece, ilk 64 bit giriş dizisini tanımlar

L0: 11001010 11001110 11000111 11001000

R0: 11001101 11000000 00100000 11000011

sonraki 32 bit ilk alt anahtarı tanımlar

X0: 11000000 11001011 11001000 11001101

I. dönüşüm fonksiyonunun değerini bulun f (R0, X0) (Ek A'ya bakın)

1). R0 ve X0 mod 2'nin toplamının hesaplanması 32

R0: 1100 1101 1100 0000 0010 0000 1100 0011

X0: 1100 0000 1100 1011 1100 1000 1100 1101

1000 1110 1000 1011 1110 1001 1001 0000

2). İkame Bloğunda Dönüşüm

R0 + X0 mod 2 32 toplamının sonucu

1000 1110 1000 1011 1110 1001 1001 0000

ikame bloğunda dönüşüm (bkz Ek B). Her 4 bitlik blok için, arama tablosundaki adresini hesaplayalım. Blok numarası sütun numarasına karşılık gelir, bloğun ondalık değeri tablodaki satır numarasına karşılık gelir. Böylece, 5. blok (1011), arama tablosunda (1110) 11. sıra ve beşinci sütun doldurularak değiştirilir.

blok numaraları

1000 1110 1000 1011 1110 1001 1001 0000

arama tablosunda eşleşen satır numaraları

8 14 8 11 14 9 9 0

dolgu

9 2 3 14 5 15 3 4

sonuç

1001 0010 0011 1110 0101 1111 0011 0100

3). 2. maddenin sonucunun 11 bit sola kayması

Böylece, f (R0, X0) fonksiyonunun değerini bulduk:

1111 0010 1111 1001 1010 0100 1001 0001

II. R1 \u003d f (R0, X0) L0'ı hesaplayın.

F (R0, X0) fonksiyonunun dönüşümünün sonucu L0 mod2'ye eklenir:

L0: 1100 1010 1100 1110 1100 0111 1100 1000

f (R0, X0): 1111 0010 1111 1001 1010 0100 1001 0001

R1: 0011 1000 0011 0111 0110 0011 0101 1001

Sorun numarası 3. Şifreleme algoritmasıRSA. İlk yüzden p ve q asal sayılarını seçerek RSA şifreleme algoritmasında genel ve özel anahtarlar oluşturun. Adınızın baş harflerinden oluşan mesajı şifreleyin: tam ad.

I. Anahtar oluşturma (bkz. Ek D).

İki asal seçelim r \u003d 13 ve q \u003d 19 (Ek E'ye bakınız).

Sonra modül

n = pq=13*19 = 247

ve Euler işlevi

(n) = (p-1)(q-1) = 12*18 = 216.

Özel anahtar d koşullar arasından seçim yapın d < (n) ve d ile karşılıklı olarak basit (n) yani d ve (n) ortak bölen yok.

İzin vermek d = 25.

Genel anahtar e koşullar arasından seçim yapın e<(n) ve de=1(mod (n)): e<216,

25e\u003d 1 (mod 216).

Son koşul, 25 sayısının e-1, kalansız 216 ile bölünebilir olmalıdır.

Böylece belirlemek e böyle bir sayı seçmen gerekiyor k, ne

25e-1 = 216 k.

Ne zaman k\u003d 14 25 alıyoruz e\u003d 3024 + 1 veya

Örneğimizde

(121, 247) - genel anahtar,

(25, 247) - gizli anahtar.

II. Şifreleme.

Şifrelenmiş "КГЛ" mesajını bir tamsayı dizisi olarak temsil edelim. "K" harfi 12 rakamına, "G" harfi 4 rakamına ve "L" harfi 13 rakamına karşılık gelsin.

Mesajı genel anahtarı (121, 247) kullanarak şifreleyelim:

С 1 \u003d (
) mod 247 \u003d 12

С 2 \u003d (
) mod 247 \u003d 199

С 3 \u003d (
) mod 247 \u003d 91

Böylece, orijinal mesaj (12, 4, 13), kriptograma (12, 199, 91) karşılık gelir.

III. Şifre çözme

Gizli anahtarı (25,247) kullanarak mesajın (12, 199, 91) şifresini çözelim:

M 1 \u003d (
) mod 247 \u003d 12

M 2 \u003d (
) mod 247 \u003d 4

M Z \u003d (
) mod 247 \u003d 13

Şifre çözme sonucunda orijinal mesaj (12, 4, 13), yani "KGL" alındı.

Uyarılar.

Örneğin,

Ele alınan örnek için

Problem numarası 4. Özet fonksiyonu.Karma işlevini kullanarak soyadınızın karma görüntüsünü bulun
, burada n \u003d pq, p, q Görev №3'ten alınır.

Hashed "KOZINA" mesajı. Hadi iki asal alalım p=13, q\u003d 19 (Ek E'ye bakınız). Biz tanımlıyoruz n=pq\u003d 13 * 19 \u003d 247. Başlatma vektörü 8'e eşit seçin (rastgele seçin). "KOZİNA" kelimesi alfabedeki harf sayılarına göre bir sayı dizisi (12, 16, 9, 10, 15, 1) olarak gösterilebilir. Böylece,

n \u003d 247, H 0 \u003d 8, M 1 \u003d 12, M 2 \u003d 16, M 3 \u003d 9, M 4 \u003d 10, M 5 \u003d 15, M 6 \u003d 1.

Formülü kullanarak

,

"KOZINA" mesajının bir karma görüntüsünü alıyoruz:

H 1 \u003d (H 0 + M 1) 2 mod n \u003d (8 + 12) 2 mod 247 \u003d 400 mod 247 \u003d 153

H 2 \u003d (H 1 + M 2) 2 mod n \u003d (153 + 16) 2 mod 247 \u003d 28561 mod 247 \u003d 156

H 3 \u003d (H 2 + M 3) 2 mod n \u003d (156 + 9) 2 mod 247 \u003d 27225 mod 247 \u003d 55

H 4 \u003d (H 3 + M 4) 2 mod n \u003d (55 + 10) 2 mod 247 \u003d 4225 mod 247 \u003d 26

H 5 \u003d (H 4 + M 5) 2 mod n \u003d (26 + 15) 2 mod 247 \u003d 1681 mod 247 \u003d 199

H 6 \u003d (H 5 + M 6) 2 mod n \u003d (199 + 1) 2 mod 247 \u003d 40.000 mod 247 \u003d 233

Sonuç olarak, 233'e eşit olan "KOZINA" mesajının bir karma görüntüsünü elde ederiz.

5 numaralı sorun. Elektronik dijital imza.Soyadınızın karma görüntüsünü kullanarak, RSA şemasını kullanarak dijital imzayı hesaplayın.

Soyadı hash görüntüsü 233 ve RSA algoritması özel anahtarı (25, 247) olsun. Daha sonra Soyadını içeren mesajın elektronik dijital imzası kurala göre hesaplanır (Ek G'ye bakınız)

s \u003d 233 25 mod 247 \u003d 168.

EDS'yi genel anahtarı (121, 247) kullanarak kontrol etmek için,

H \u003d 168121 mod 247 \u003d 233.

Mesajın karma görüntüsü, bulunan H değeriyle eşleştiğinden, imza gerçek olarak kabul edilir.