Sıfır bilgi kodu barındırma [kapalı]


28

Çevrimiçi hizmet sağlayıcılar tarafından depolanan verilerin yaygın hükümet izlemesi ile ilgili son vahiyler ışığında, sıfır bilgi hizmetleri şu anda tüm öfkedir.

Sıfır bilgi hizmeti, tüm verilerin sunucuda depolanmayan bir anahtarla şifrelenmiş olarak depolandığı bir hizmettir. Şifreleme ve şifre çözme tamamen istemci tarafında gerçekleşir ve sunucu hiçbir zaman düz metin verilerini veya anahtarı görmez. Sonuç olarak, servis sağlayıcısı, şifresini çözemez ve verileri, istese de üçüncü taraflara veremez.

Bir örnek vermek gerekirse: SpiderOak , Dropbox'ın sıfır bilgi sürümü olarak görülebilir.

Programcılar olarak, belirli bir çevrimiçi servis sağlayıcı sınıfına - kodumuz - en hassas verilerimizin bir kısmına çok güveniyoruz ve güveniyoruz: kod barındırma sağlayıcıları (Bitbucket, Assembla, vb.). Elbette burada özel depolardan söz ediyorum - sıfır bilgi kavramı kamu depoları için bir anlam ifade etmiyor.

Benim sorularım:

  1. Sıfır bilgi kodlu bir barındırma hizmeti oluşturmanın teknolojik engelleri var mı? Örneğin, SVN, Mercurial veya Git gibi popüler sürüm kontrol sistemleri tarafından kullanılan ve istemciyle sunucu arasında iletilen verilerin şifreli olduğu bir şemanın uygulanmasını zorlaştıracak (veya imkansız) ağ protokolleriyle ilgili bir şey var mı? Sunucunun bilmediği bir anahtar?

  2. Bugün var olan herhangi bir sıfır bilgi kodu barındırma hizmeti var mı?


1
Homomorfik şifreleme olmadan , sıfır bilgi koduna sahip bir barındırma sitesinin, sıfır kutulu bir sıfır bilgi sürümü üzerinden nasıl bir avantaj sağlayabileceğini görmüyorum. Hiç kimsenin, hem güvenli (yani uzmanların güvenebileceği kadar güvenli) hem de kullanışlı olacak kadar hızlı bir program geliştirdiğine inanmıyorum.
Brian,

2
@AndresF. SpiderOak’ın yalnızca istemcide fark yaratmanın, sunucu şifreli farkları sakladığını ve daha sonra fark ve baz şifreli olduğunda istemcide farktan esasa uygulamanın tekrar oluştuğunu varsayabilirim. Dillerinin net olmadığı konusunda hemfikirim.
apsillers

2
@ apsillers: Ya da bu tür içeriği kasıtlı olarak bir dosyaya yerleştirebilir ve dosyayı tanımlamak için kullanabilirsiniz (örneğin, eğer birisi korsanlığı gizlemek için şifreleme kullanmaya çalışıyorsa).
Brian

4
Herhangi bir deneyime sahip olduğum bir şey değil, ancak sıfır bilgi kodlu bir barındırma hizmetine sahip olmanın olası bir teknolojik engelini hayal edebiliyorum: tüm kullanıcıların aynı anahtarı bilmesi / kullanması gerekmez mi? Ve eğer durum buysa, farklı seviyelerde kullanıcı erişimi sağlayan kimlik doğrulama mekanizması ne olacaktır?
CB

2
@gnat: Bir öneri istemiyorum. Sadece tarif ettiğim türden bir hizmetin olup olmadığını soruyorum. Böyle bir hizmetin mevcudiyeti, soruda daha önce sorduğum teknolojik engellerin aşılabilir olduğuna dair kanıt sağlayacaktır.
HC4 - Monica

Yanıtlar:


3

Her satırı ayrı ayrı şifreleyebilirsiniz. Dosya adlarınızı ve yaklaşık satır uzunluklarını ve satırların değiştiği satır numaralarını sızdırabilirseniz, şöyle bir şey kullanabilirsiniz:

https://github.com/ysangkok/line-encryptor

Her satır ayrı olarak şifrelendiğinden (ancak aynı anahtarla), yüklenen değişiklikler (genellikle olduğu gibi) yalnızca ilgili satırları içerecektir.

Halihazırda yeterince uygun değilse, biri düz metin, biri şifreli metin olmak üzere iki Git deposu oluşturabilirsiniz. Düz metin deposunda (yerel olan) işlem yaptığınızda, bir işlem kancası fark alabilir ve onu şifreli metin deposuna uygulayacak olan yukarıda belirtilen satır şifreleyiciden geçirebilir. Şifreli metin deposu değişiklikleri taahhüt edildi ve yüklendi.

Yukarıdaki satır şifreleyici SCM agnostiktir, ancak birleştirilmiş fark dosyalarını (düz metin) okuyabilir ve değişiklikleri şifreleyip şifreli metne uygulayabilir. Bu, size birleşik bir fark yaratacak (Git gibi) herhangi bir SCM'de kullanılabilir olmasını sağlar.


Bunun için git'in temizliğini kullanamaz mısın?
svick

@svick: Yapabilirsiniz, ancak bu şekilde, tüm dosyayı yeniden şifrelemekten kaçınmaya nasıl izin vereceğinizi bilmiyorum. Ancak, elbette, dosya boyutları küçük olduğundan kod için çok önemli olmaz. Ancak bir "hat şifreleyicisi" ne gerek yoktur o zaman herhangi bir şifreleme aracını kullanabilirsiniz.
Janus Troelsen

Çok sayıda metin örneği (bilinen bir yapıya sahip) , tuşa saldırmayı kolaylaştıracak bir şey olmaz mıydı ? Her boş satır aynı şifrelenir. Bir javadoc'un her başlangıcı ve sonu aynı olacaktır. Artık, kullanılabilecek kodun bir kısmı için açık metni ve şifre metnini biliyorsunuz. Bu muhtemelen hobilerden başkalarına karşı yararlı olmaz (eğitimli kripto türleri veya yeterli bilgi işlem gücü olan herhangi biri yeterince çaba sarf edebilir).

@MichaelT: Hayır, IV'ler yüzünden. Kendiniz deneyin :) Bağlantılı uygulamayı kullanarak, satırları şifreleyin <IV>,<ciphertext>.
Janus Troelsen

1
@svick: Satırlar ayrı ayrı şifrelenir. Bir çizgiyi değiştirirseniz, tüm çizgi yeniden şifrelenir, ancak yeni bir IV (her zamanki gibi) olur. Ancak dosyanın geri kalanına dokunulmayacak! Şifreleme deterministiktir, ancak IV'ler de girdilerdir ve sözde rasgele seçilirler.
Janus Troelsen

1

Herhangi bir engel olduğunu sanmıyorum - SVN'yi düşünün, depolama için sunucuya gönderilenlerin, kodunuzun önceki ve geçerli sürümleri arasındaki delta olduğunu - yani 1 satırı değiştirirsiniz, bu satır sunucuya gönderilir. Sunucu daha sonra 'kör bir şekilde', verileri kontrol etmeden saklar. Delta'yı şifrelediyseniz ve bunun yerine gönderdiyseniz, sunucu üzerinde hiçbir etkisi olmazdı, aslında sunucuyu hiçbir şekilde değiştirmeniz gerekmez.

MIME türü gibi kolayca şifrelenemeyen meta veri özellikleri gibi önemli olabilecek başka bitler de olabilir; görüntülemek için müşteri. Dizin yapısının görünüp görünmeyeceğinden emin değilim, SVN'nin dizinleri saklama biçimi nedeniyle görünmeyeceğini düşünüyorum, ancak bunun yanlış olduğunu düşünüyorum. İçeriği güvenli ise, bu sizin için önemli olmayabilir.

Bu, çeşitli kod görüntüleme özelliklerine sahip bir web sitenize sahip olamayacağınız, sunucu tarafı depo tarayıcısı veya günlük görüntüleyicisine sahip olamayacağınız anlamına gelir. Kod farkı yok, çevrimiçi kod inceleme aracı yok.

Bunun gibi bir şey zaten var, bir noktaya kadar Mozy, verilerinizi özel anahtarınızla şifrelenmiş olarak saklar (kendi kodunu kullanabilirsiniz, ve "kendi anahtarınızı kaybederseniz çok kötü, verilerinizi geri yükleyemezsek," siz ", ancak bu genel kullanıcıyı daha iyi hedefliyor). Mozy, dosyalarınızın geçmişini de saklar, böylece önceki sürümleri alabilirsiniz. Düştüğü yerde yükleme düzenli olarak yapılır; istediğiniz zaman kontrol edilmez ve depolama alanınız tükendiğinde eski sürümleri attığına inanıyorum. Ancak buradaki kavram, mevcut sistemlerini kullanarak güvenli kaynak kontrolü sağlamak için onu değiştirebildi.


Re: "Bu, çeşitli kod görünümü özelliklerine sahip bir web sitenize sahip olamayacağınız, sunucu tarafı depo tarayıcısına veya günlük görüntüleyicisine sahip olamayacağınız anlamına gelir. Kod farklı değil, çevrimiçi kod inceleme araçları yok." - Eğer uygulama mantığı müşteri tarafında JS'deyse ve şifrenizi / anahtarınızı (ancak sunucuya göndermemenizi) girmenize neden olmuşsa, bunlara hala sahip olabilirsiniz, değil mi?
HC4 - Monica

Evet, olabilir ... Ağ üzerinden şifreli veri aldığını bildiği sürece her şey. Sunucunun verilerin şifresini çözemediği açık bir sınırlamasıdır.
gbjbaanb

1

Bunlardan birini yapmaktan nefret ediyorum 'bu, sorunuza cevap vermeyecek' cevapları .. ama ..

Bu endişeleri gidermek için iki hazır çözüm düşünebilirim.

  1. Kendi başınıza özel bir Git sunucusu barındırın. Ardından bu sunucuyu ekip üyelerinize erişim izni verdiğiniz bir VPN'ye yerleştirin. Sunucu ile olan ve sunucudan yapılan tüm iletişim şifrelenir ve tabii ki sunucuyu işletim sistemi düzeyinde şifreleyebilirsiniz.

  2. BitSync de numarayı yapmalı. Her şey şifreli olacak ve her yerden erişilebilecek devasa bir ağda. Aslında tüm bu BitCoin / BitMessage / BitSync teknolojisinin gerçekten iyi bir uygulaması olabilir.

Son olarak, https://security.stackexchange.com/ adresindeki kişiler biraz daha fazla kavrayışa sahip olabilir.


BitSync ile ilgili olarak: sürüm kontrol sistemi için bir yedek olarak mı yoksa sürüm kontrol sistemi ile birlikte mi kullanıldığını öneriyorsunuz? Eski, o zaman emin, ama bu çok ilginç değil. Dosyaları SpiderOak üzerinden de paylaşabildim ve merkezileşmiş olacaktı, ama yine de sıfır bilgili. İkincisi, o zaman nasıl?
HC4 - Monica

1
@ HighCommander4 Denemedi, ancak çalışmaması için herhangi bir sebep olmamalıdır .. İlklendirilen git klasörünüzü paylaşmak için senkronizasyon ayarlayamadınız mı, sonra normal bir şey yapamaz mıydınız 'git push ./syncedFolderActingAsServer/MyAwesomeProject/src/'? Ayrıca git seviye izinleri de yapabilirsiniz. Birisi bunu denemeli!
Rubber Duck

1

Anladığım kadarıyla, git pullçalışma şekli, sunucunun istediğiniz tüm nesneleri içeren ancak şu anda sahip olmayan bir paket dosyası göndermesidir. Ve bunun için tam tersi git push.

Doğrudan böyle yapamayacağınızı düşünüyorum (çünkü bu, sunucunun nesneleri anlaması gerektiği anlamına gelir). Bunun yerine, sunucunun bir dizi şifreli paket dosyasıyla çalışmasına izin verebilirsiniz.

Bunu yapmak için pull, son pullşifresinden beri eklenen tüm paket dosyalarını indir , şifrelerini çöz ve git deponuza uygula. Bunu yapmak için pushönce yapmanız gerekir pull, böylece sunucunun durumunu bilirsiniz. Herhangi bir çakışma yoksa, değişikliklerinizle bir paket dosyası yaratır, şifreler ve yüklersiniz.

Bu yaklaşımla, oldukça verimsiz olan çok sayıda minik paket dosyası elde edersiniz. Bunu düzeltmek için, bir dizi paket dosyası indirebilir, şifresini çözebilir, bir paket dosyasında birleştirebilir, şifreleyebilir ve sunucuya yükleyebilir ve bu dizinin yerine geçerek işaretleyebilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.