Açık kaynak projemde gizli verileri nasıl gizleyebilirim?


13

Birkaç dosya ana bilgisayarlar arasında DropBox dosyaları yükleyen bir açık kaynak projesi var. Şu anda DropBox için ekran kazıma yapıyorum. Onların API kullanmak için, onlar tarafından bana OAuth kimlik doğrulaması için sağlanan bir GİZLİ ANAHTAR kodlamak zorunda. Ancak korkarım ki, herkesin görebileceği açıkça görülebiliyorsa, anahtar gizli olmayacaktır.

Kötü niyetli bir kişinin, bilgisayarımıza (masaüstü senkronizasyonu etkinleştirilmişse) ve başkalarının bilgisayarına (eğer klasörleri vardı). :Ö

Benimle aynı problemi olan bu cevapsız soruyu buldum .

Ancak genel olarak, açık kaynaklı bir projede gizli verilerin nasıl gizleneceğini bilmek istiyorum.

Bir fikrim var.

  • Kaynak kodunda "<GİZLİ ANAHTAR>>" gibi bir yer tutucunuz var mı ve yalnızca sürüm için ikili dosya oluştururken dolduruyor musunuz? (İğrenç!)

İyi bir fikir var mı?


1
Bunu yapmanın tek güvenli yolu bu. Gizli anahtarınızı da kodlamak için pgp şifrelemesini kullanabilirsiniz, o zaman yalnızca kodunu çözebilirsiniz, ancak neden yayınlamaya zahmet ediyorsunuz?
Prescott

Bu soruyu kontrol etmek isteyebilirsiniz: programmers.stackexchange.com/questions/180957/… - bu DropBox API anahtarlarıyla ilgili değil, ancak genel mesaj aynı.
tdammers

git-crypt sizin için yapıldı :) github.com/AGWA/git-crypt
nha

Yanıtlar:


14

Temel fikir, kodda veya derlenmiş ikili dosyada gizli değerleri check-in ETMEMEKTİR. Özellikle proje açık kaynaksa gerçekten yapmamalısınız. Bunu yapmak için uygulayabileceğiniz birkaç yapılandırma stratejisi vardır:

Koddaki yer tutucular (sabit kodlanmış değerler)

Kodun yer tutucuları - önerildiği gibi - kodun değiştirilmesi kolay olduğu için (derlemeye gerek kalmadan) dinamik programlama dillerinde en akılcı ve en kolay olanıdır. MediaWiki gibi bir çok açık kaynak projesinin bunu yaptığını gördüm LocalSettings.php.

Bu strateji ile olumsuz anahtar kodlanmış olmasıdır. Dolayısıyla, program bir ikili olarak dağıtılırsa, o zaman anahtarın sabit kodlu olması, bu programı özellikle sürdürülebilir kılmaz.

Yapılandırma Metin Dosyaları

Bunu, yapılandırma metin dosyalarını uygulayarak da yapabilirsiniz , yani program / uygulama bir yapılandırma dosyası arar ve bu dosyadaki değerleri okur. Yer tutucularla örnek bir yapılandırmayı iade edebilir, ancak gerçek yapılandırmayı makinenizde yerel olarak kullanabilirsiniz.

Sizin durumunuzda key.conf, gerçek anahtarla bir metin dosyası oluşturabilir , programın bu dosyayı kullanmasına ve sürüm kontrolü tarafından yok sayılmasına izin verebilirsiniz . Yararlı olmak için, key.conf.examplesahte bir anahtarla bir metin dosyasına giriş yapabilir ve bunu kontrol edebilirsiniz. Programınızın / uygulamanızın, kullanıcının gerçek anahtarı doğru dosyaya eklemesi için yardımcı bir hata mesajı verdiğinden emin olun.

Bazı programlama dillerinde bunu sizin için otomatik olarak sağlayan API'ler bulunur, örneğin:

Uygulamanız bir veritabanı uygulamasıysa, anahtarı veya diğer yapılandırma değişkenlerini veritabanına koymayı düşünün. Yukarıdaki yapılandırma metin dosyasıyla aynıdır, ancak anahtar gibi tüm yapılandırma değişkenlerini bir veritabanı tablosuna koyarsınız.

Tercihler görünümü veya bir Arka Ofis uygulaması aracılığıyla

Program bir pencere veya görünümleri olan bir web uygulamasıysa, uygulamanın bir tür tercihler görünümü aracılığıyla yapılandırma dosyasını oluşturmasına da izin verebilirsiniz. Bu şekilde, yukarıda önerildiği gibi örnek bir yapılandırma dosyasını kontrol etmeniz gerekmez.

MediaWiki, LocalSettings.phpdosyayı ilk yükleme işleminde otomatik olarak oluşturarak benzer şekilde çözdü .

Kuşkusuz, bu yalnızca arka plan işlemleri, hizmetler veya arka plan programları olarak çalışan programlar için bir seçenek değildir. Ancak bu nedenle, genellikle Back Office uygulaması olarak adlandırılan web uygulamalarında, yönetim ve tercih ayarları için bir giriş noktası oluşturmak üzere ayrı GUI projeleri oluşturursunuz .


Burada dikkat edilmesi gereken bir nokta: Uygulamanın kendi yapılandırma ayarlarını değiştirmesi, ayarlar dosyasının uygulamanın kullanıcısı tarafından yazılabilir olması anlamına gelir ve bu da saldırı yüzeyini artırır, bu nedenle böyle bir kullanıcı arayüzüne gerçekten ihtiyacınız olup olmadığını çok düşünmelisiniz.
tdammers

2

En kolay yol, gizli verileri yayınlamamaktır. Bazı seçenekler:

  • Sorudaki gibi bir yer tutucu kullanın.
  • Özellikle anahtar için bir başlık dosyası kullanın, kaynak denetimine taahhüt etmeyin ve yalnızca özel olarak güvenilir taraflara dağıtın.

Açık kaynak geliştirme için ikinci seçeneği kullandım çünkü bu, derlemeden hemen önce ayrıntıları doldurmak veya taahhüt etmemeyi hatırlamak için bir değişiklik yapmaktan endişelenmenize gerek olmadığı anlamına gelir.


2

Birisi kaynak koduna (veya tersine mühendislik uygulanabilen bayt koduna) sahipse, kodu bir hata ayıklayıcıda çalıştırarak ve anahtarı gönderdiğiniz noktaya bir kırılma noktası koyarak gizli anahtarı elde edebilecektir.

Biraz zorlaştırabilir, önceden kodlanmış bir C kitaplığı, kutuda kodlanan anahtarla konuşarak, ancak kodların dışarı sızacağı birçok yol var (örneğin dizeleri düşünüyorum).

Bunu yapmayı düşünebileceğim tek güvenli yol, bırakma kutusuna gönderim yapan bir web hizmeti sunmaktır. Bu şekilde gizli anahtar sunucunuzda kontrolünüz altında kalır. Barındırma ve bant genişliği maliyetleri, bu çözümün ücretsiz bir uygulama için ideal olmaktan daha az olduğu anlamına gelir, ancak ek bonus, sunucunuzun dosyalarını dropbox'a gönderilmeden önce istemcilerin kimlik doğrulamasını yapmasıdır.

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.