# Goldwasser-Micali şifreleme sistemi
Goldwasser–Micali (GM) kriptosistemi 1982 yılında Shafi Goldwasser ve Silvio Micali tarafından geliştirilmiş bir asimetrik anahtar şifreleme algoritmasıdır. GM standart kriptografik varsayımlar altında güvenliği kanıtlanmış ilk probabilistik açık anahtar şifreleme yöntemidir. Bununla birlikte başlangıç düz metinden yüzlerce kez daha geniş olan şifreli metinler olduğundan verimli bir kriptosistem değildir. Kriptosistemin güvenlik özelliğini kanıtlamak için Shafi Goldwasser ve Silvio Micali anlamsal güvenliğin geniş alanda kullanılan bir tanımını önerdiler.


## Temelleri.
GM kriptosistemi kuadratik kalan probleminin p ve q büyük asal sayılar olmak üzere, N=p.q modunun zorluğunun varsayımına dayanan anlamsal güvenliktir. Bu varsayım verilen(x,N)'nin x'in, +1 için bir Jacobi sembolü olduğunda, N(x=y^2 mod N bazı y'ler için) modulüne göre kuadratik bir kalan olup olmadığını belirleme zorluğunu ifade eder. Kuadratik kalan problemi yeni kuadratik kalanlar herhangi bir kısım tarafından üretilebiliyorken verilen N nin çarpanlara ayırımını bu çarpanla ayrım bilgisi verilemese bile kolayca çözebilir. GM kriptosistemi birbirinden ayrı düz metin bitlerini ya rastgele kuadratik kalanlar ya da tüm kuadratik sembol +1 ile birlikte modül N'ye göre kalmayanları alıp şifreleyerek bu asimetrikliği sağlamış olur. Alıcılar N'nin çarpanlarını gizli anahtar olarak kullanır ve mesajı aldığı şifreli metnin değerlerinin kuadratik kalanını test ederek deşifrelerler.
Çünkü Goldwasser–Micali düz metnin her tek bitini şifrelemek için yaklaşık olarak |N| boyutunda bir değer üretir. GM şifreleme sağlam ölçüde şifreli metin genişlemesini sonucunu verir. Çarpanlara ayırmaya çalışma ataklarını önlemek için, |N| nin yüzlerce bit ya da daha fazla olması tavsiye edilmiştir. Bu yüzden yöntem temelde bir kavram kanıtı olarak hizmet eder ve Elgamal gibi daha etkili kanıtlanabilir güvenlik yöntemleri geliştirilmiştir. Çünkü şifreleme probabilistik algoritma kullanılarak şifrelenmiştir. Verilen bir düzmetin her bir zamanda şifrelediği birbirinden çok farklı şifrelimetinleri üretebilir. Bu hasımın bilinen şifrelimetinleri sözlükle karşılaştırarak haberleşmeler arasında müdahale edip eriştiği mesajlardan herhangi bir benzerlik bulup düz metne erişmeye çalışmasını önleme avantajı demektir.


## Yöntemin Tanıtılması.
Goldwasser–Micali 3 algoritma içerir: açık ve gizli anahtar üreten probabilistik anahtar üretimi algoritması, probabilistik kriptosistem algoritması ve bir deterministik deşifreleme algoritması.
Bu yöntem verilen bir x değerinin kare mod N, ((p,q) N nin çarpanları) olup olmadığına karar vermenin zorluğuna güvenmektedir. Bu aşağıdaki prosedürü kullanarak başarılır:
1. "xp" = "x" mod "p", "xq" = "x" mod "q" Hesapla
2. EĞER x_p^(p-1)/2 ≡1p VE x_q^(q-1)/2 ≡1q ise "x" mod "N". ye göre bir kuadratik kalandır.


## Anahtar üretimi.
GM içindeki kullanılan mod alma işlemi RSA kriptosistem içerisindeki aynı yöntemle gerçekleştirilir. (ayrıntılar için RSA anahtar üretimine bakınız)
1.Alice 2 farklı büyük "p" ve "q" asal sayılarını rastgele ve her biri bir birinden bağımsız olacak şekilde üretir.
2.Alice "N" = "p q". yu hesaplar
3.Alice (x/p)=(x/q)=-1 olacak şekilde bir x bulur ve bundan dolayı Jacobi sembolü (x/N) is +1 dir.
X değeri rastgele sayılar seçerek ve 2 Legendre sembolünü test ederek bulunabilir. Eğer (p,q) =3 mod 4 (N Blum Tam sayısı) ise o zaman N-1 değeri gereken özelliği karşılıyor anlamına gelir.
Açık anahtar ("x","N") den oluşur. Gizli anahtar ("p","q") çarpanlarından oluşur.


## Mesaj Şifreleme.
Varsayalım ki Bob Alice e m mesajını göndermeyi istesin:
Bob ilk önce "m" i ("m"1, ..., "mn") bitlerinden oluşan bir string olarak çözecektir.
1.Her "m""i", biti için, Bob modulo "N" den birimler halinde rastgele "y" değeri üretir veya
 GCD("y","N") = 1. olacak şekilde rastgele değerler üretir.
 c_i = y^2 x^m_iN. değerlerini sonuç olarak üretir.
Bob ("c"1, ..., "c""n"). Şifreli metinlerini gönderir.


## Mesaj Deşifreleme.
Alice ("c"1, ..., "c""n") i alır. Aşağıdaki prosedürü kullanarak "m" yi geri elde edebilir.
1.Asal çarpan (p,q) kullanan Her bir i için, Alice ci değerinin kuadratik kalan olup olmadığını belirler eğer öyle ise "m""i" = 0, değilse "m""i" = 1. dir.
Alice "m" = ("m"1, ..., "m""n"). Mesajını çıktı olarak üretir.


## Güvenlik özellikleri.
Burada basitçe bu kriptosistemi Jacobi sembolü "+1" ile rastgele modül "N" değerinin kuadratik kalan olup olmadığını belirleme problemine dönüştürerek kırmaya çalışma vardır. Eğer verilen bir "A" algoritması kriptosistemi kırarsa, ardından verilen bir 'x' değerinin kuadratik modül N kalanı olup olmadığını belirlemek için, biz "A"'yı ("x","N") açık anahtarlarını kullanarak kırabildiğini anlamak için test ederiz. Eğer 'x' bir kalan değilse o zaman 'A' doğru olarak çalışacaktır. Ancak eğer 'x' bir kalansa o zaman her şifreli metin basitçe rastgele kuadratik kalan olabilir, bu yüzden 'A' zamanın yarısından daha doğru olamaz. Bundan başka bu problem verilen bir 'B' için her açık anahtarı tıpkı diğer açık anahtar gibi güvenli kılan rastgele kendini dönüştürme problemidir.
GM kriptosistemi homomorfik özelliklere sahiptir. Eğer "c"0, "c"1 "m"0, "m"1, bitlerinin şifrelenmiş halleriyse o zaman "c"0"c"1 mod "N", in şifrelenmiş halleri olacaktır. Bu sebebten dolayı GM kriptosistemi bazen daha karmaşık kriptografik ilkel yapılarla birlikte kullanılır.