**Merkle-Hellman kripto sistemi**, 1978 yılında Martin Hellman ve Ralph Merkle tarafından geliştirilen ilk açık anahtarlı kriptosistemlerden biridir. RSA'dan daha hızlı gerçekleştirilebilmesine rağmen Adi Shamir tarafından 1982'de güvensiz olduğu gösterilmiştir.

### Tanım

Merkle-Hellman asimetrik anahtarlı bir kripto sistemdir; bunun anlamı, iletişim için iki anahtara ihtiyaç vardır. Bir Açık ve bir Gizli Anahtar. Ayrıca, RSA'dan farklı olarak, tek yönlüdür -Açık Anahtar sadece şifreleme, ve Gizli Anahtar sadece deşifreleme için kullanılır. Böylece bu yöntem Dijital imzalama tarafından kimlik kanıtlama için kullanılamaz.

Merkle-Hellman sistemi altküme toplamı problemini (sırt çantası probleminin özel bir durumu) temel alır.Problem şu şekilde devam eder:

Belirlenmiş A kümesi ve bir b sayısı, b nin toplamlarından oluşan A nın bir altkümesi.Bununla birlikte eğer sayı kümesi süper artan ise -şöyle ki; sayı kümesinin her bir elemanı önceki sayıların tamamının toplamından daha büyük olmalı - problem *Greedy algoritması* ile beklenen zamanda ve kolayca çözülebilir.

  

Anahtar üretimi

Merkle-Hellman algoritmasında, anahtarlar birer sırt çantalarıdır. Açık anahtar A nın "kolayca kırılamayan" sırt çantasıdır ve
Gizli Anahtar da B nin "basit" ya da süper artan bir sırt çantası, bir çarpan ve bir modülden oluşan iki ek sayının birleşimidir.
Çarpan ve modül, süper artan sırt çantasından kolay kırılamayan sırt çantasına çevirmede kullanılabilir. Eğer, problem
beklenen zamanda çözülebilirse; Aynı sayılar kolay kırılamayan sırt çantasının altküme toplamının basit sırt çantasının 
altküme toplamına çevrilmesinde kullanılabilir. 

#### Şifreleme

Mesajı şifrelemek için; A'nın kolay kırılamayan sırt çantasının altkümesinden seçilen anahtar uzunluğunda bit kümesi ile karşılastırılır. 
Açık anahtardaki her bir terim, düz metindeki bir elemanı A\_m altkümesinin bir elemanını karşılar, düz metindeki 0 A\_m kümesinin inşa edilmesini
göz ardı eder.Bu altkümenin elemanları toplanmış ve toplamanın sonucu şifrelenmiş metindir. 

#### Deşifreleme

Deşifreleme mümkündür; çünkü çarpan ve modül kolayca çevrilebilir, süper artan sırt çantasındaki acık anahtar,böylece
süper artan sırt çantasındaki elemanların karşılandığı toplamdaki şifreli metin sayı dönüştürme çevriminde 
kullanılabilir. Sonra; basit bir *Greedy Algoritması* kullanılarak, basit sırt çantası Büyük o gösterimindeki aritmetik operatörler kullanılarak
çözülür. Böylece mesaj deşifrelenmiş olur.

Matematiksel metot
------------------

### Anahtar üretimi

 n bitten oluşan mesajı şifrelemek için süperartan bir dizi seçilir:  

```
        *w* = (*w*1, *w*2, ... *w**n*)   n sıfırdan farklı doğal sayı. 
```

 q gibi bir rastgele sayı seçilir:  

```
        {\displaystyle q>\sum \_{i=1}^{n}w\_{i}} ve *r* gibi rastgele bir sayı seçilir:
```

```
        Ortak bölen(*r*,*q*) = 1 (*r* ve *q*  Aralarında asal)  

```

*q* nun böyle seçilmesi şifrelenmiş metnin benzersiz olmasını sağlar. Eğer *q* düz metinden daha küçük seçilirse, aynı şifrelenmiş metinler elde edilebilir. *r* ile *q* aralarında asal olmalıdır yoksa mod *q* göre tersine çevrilemeyecektir. *q* nun tersinin olması gereklidir. Böylece deşifreleme yapılabilir.  

Şimdi diziyi hesaplayalım:  

β = (β1, β2, ... β*n*)   
 β*i* = *rw**i* mod *q*.  

Açık Anahtar β ve Gizli Anahtarlar (*w*, *q*, *r*) dir.

#### Şifreleme

*n* bit mesajı şifrelemek için 

α = (α1, α2, ... α*n*),
{\displaystyle \alpha \_{i}} mesajın *i*. biti ve {\displaystyle \alpha \_{i}{\boldsymbol {\in }}}{0, 1}  

{\displaystyle c=\sum \_{i=1}^{n}\alpha \_{i}\beta \_{i}.}  
 Şifrelenmiş metin c dir.

### Deşifreleme

Deşifreleme amacıyla alınan bir *c* şifreli mesajı, {\displaystyle \alpha \_{i}} gibi bir biti ile şu şekilde uyuşur. 

{\displaystyle c=\sum \_{i=1}^{n}\alpha \_{i}\beta \_{i}.}  
β*i* rastgele değerler aldığından dolayı bu zor bir problem olabilir. Çünkü alıcı alt küme probleminin örnek bir çözümüne sahip olmalıdır.  
 Anahtar Şifreleme, *s* tam sayılarını *r* mod *q* nun modüler tersinden bulmaktır. Bunun anlamı, *s* *r* mod *q*=1 den *s* yi ya da *s'**r*****=*k'****q*+1 *k* gibi bir tam sayı bulmaktır. *r*, Ortak bölen(*r*,*q*) = 1 den seçildiğinden Extended Euclidean algorithm kullanılarak *k* ve *s* bulunabilir. Alıcı *c* şifreli metnini hesaplar:
{\displaystyle c'\equiv cs{\pmod {q}}.} Bu yüzden
{\displaystyle c'\equiv cs\equiv \sum \_{i=1}^{n}\alpha \_{i}\beta \_{i}s{\pmod {q}}.}
Çünkü *rs* mod q = 1 ve β*i* = *rw**i* mod *q*

{\displaystyle \beta \_{i}s\equiv w\_{i}rs\equiv w\_{i}{\pmod {q}}.} Bu yüzden
{\displaystyle c'\equiv \sum \_{i=1}^{n}\alpha \_{i}w\_{i}{\pmod {q}}.}
Bütün *w*i değerlerinin toplamı *q* dan küçüktür ve bu yüzden {\displaystyle \sum \_{i=1}^{n}\alpha \_{i}w\_{i}} , [0,*q*-1] aralığındadır. Böylece alıcı alt küme problemini çözmüş olur.

{\displaystyle c'=\sum \_{i=1}^{n}\alpha \_{i}w\_{i}.}
### Örnek

İlk olarak süper artan bir dizi olan *w* yi oluşturalım:

w = {2, 7, 11, 21, 42, 89, 180, 354}
Bu Gizli Anahtar için temeldir. Buradan toplamı hesaplayalım:

{\displaystyle \sum w=706}
Sonra toplamdan büyük bir *q* sayısı seçelim:

`q = 881`
Ayrıca, {\displaystyle [1,q)} aralığında *q* ile Aralarında asal bir *r* sayısı seçelim:  

`r = 588`
*q*, *w* ve *r* den oluşan Gizli anahtarımız oluşmuş oldu.
*w* kümesinin her bir elemanını *r*mod*q* ile çarparak *β* kümesini üretiyoruz:   

β = {295, 592, 301, 14, 28, 353, 120, 236}  
 Çünkü

```
2 * 588 mod 881 = 295
7 * 588 mod 881 = 592
11 * 588 mod 881 = 301
21 * 588 mod 881 = 14
42 * 588 mod 881 = 28
89 * 588 mod 881 = 353
180 * 588 mod 881 = 120
354 * 588 mod 881 = 236  

```

*β* kümesi ile Açık Anahtarımızı oluşturmuş olduk.  
 Ayşe "a" yı şifrelemek istediğini söylesin. İlk önce Ayşe "a" nın ikili tabandaki değerini bulmalıdır(bu durumda, ASCII ya da UTF-8 kullanılmalıdır).   

01100001
Ayşe sırasıyla her bir biti *β* kümesindeki eşleşen her bir elemanla çarpmalıdır.  

`a = 01100001`

```
0 * 295
+ 1 * 592
+ 1 * 301
+ 0 * 14
+ 0 * 28
+ 0 * 353
+ 0 * 120
+ 1 * 236
= 1129  

```

Bunu alıcıya göndermelidir. Ali, deşifrelerken bu sayıyı *r* −1 mod {\displaystyle q} ile çarpmalıdır (Modular multiplicative inverse).  

`1129 * 442 mod 881 = 372`  

Şimdi Ali, 372 den; *w* kümesinden seçilen 372 ye eşit ya da 372 den küçük en büyük sayıyı çıkararak en son fark {\displaystyle 0} oluncaya kadar işleme devam edilir. 

```
372 - 354 = 18
18 - 11 = 7
7 - 7 = 0  

```

Seçtiğimiz elemanların yerine 1 yazdığımızda ortaya gönderilen mesajın ikili karşılığı çıkmış olur.  

`01100001`  

Bu ikili kod geri çevrildiğinde, Ayşe'nin Ali'ye yolladığı "a" mesajına ulaşmış oluruz.

| * g
* t
* d
Açık anahtarlı şifreleme |
| --- |
| Algoritmalar | 

|  |  |
| --- | --- |
| Sabit çarpanlara ayırma | 
* Benaloh
* Blum–Goldwasser
* Cayley–Purser
* Damgård–Jurik
* GMR
* Goldwasser–Micali
* Naccache–Stern
* Paillier
* Rabin
* RSA
* Okamoto–Uchiyama
* Schmidt–Samoa

 |
| Ayrık logaritma | 
* BLS
* Cramer–Shoup
* DH
* DSA
* ECDH
* ECDSA
* EdDSA
* EKE
* ElGamal
	+ imza çizelgesi
* MQV
* Schnorr
* SPEKE
* SRP
* STS

 |
| Diğerleri | 
* AE
* CEILIDH
* EPOC
* HFE
* IES
* Lamport
* McEliece
* Merkle–Hellman
* Merkle İmzası
* Naccache–Stern
* Naccache–Stern knapsack kriptosistemi
* NTRUEncrypt
* NTRUSign
* Üç geçişli protokol
* XTR

 |

 |
| Kuram | 
* Ayrık logaritma
* Eliptik eğrisel şifreleme
* Değişken olmayan şifreleme
* RSA problemi
* Trapdoor fonksiyonu

 |
| Standartlaştırma | 
* CRYPTREC
* IEEE P1363
* NESSIE
* NSA Suite B

 |
| Konular | 
* Elektronik imza
* OAEP
* Fingerprint
* PKI
* Güven ağları
* Anahtar boyutu
* Kuantum sonrası şifreleme

 |

Kaynakça
--------

1. ↑  Merkle, Ralph; Hellman, Martin (1978). "Hiding information and signatures in trapdoor knapsacks". *IEEE Transactions on Information Theory*. **24** (5). ss. 525-530. doi:10.1109/TIT.1978.1055927.
2. ↑  Shamir, Adi (1984). "A polynomial-time algorithm for breaking the basic Merkle - Hellman cryptosystem". *IEEE Transactions on Information Theory*. **30** (5). ss. 699-704. doi:10.1109/SFCS.1982.5.