Dalam terang wahyu baru-baru ini tentang pemantauan pemerintah luas data yang disimpan oleh penyedia layanan online, layanan nol-pengetahuan adalah semua sekarang marah.
Layanan tanpa pengetahuan adalah layanan tempat semua data disimpan dienkripsi dengan kunci yang tidak disimpan di server. Enkripsi dan dekripsi terjadi sepenuhnya di sisi klien, dan server tidak pernah melihat data plaintext atau kunci. Akibatnya, penyedia layanan tidak dapat mendekripsi dan memberikan data kepada pihak ketiga, bahkan jika itu diinginkan.
Sebagai contoh: SpiderOak dapat dilihat sebagai versi Dropbox tanpa pengetahuan.
Sebagai programmer, kami sangat bergantung pada, dan mempercayai beberapa data kami yang paling sensitif - kode kami - untuk kelas penyedia layanan online tertentu: penyedia kode hosting (seperti Bitbucket, Assembla, dan sebagainya). Saya tentu saja berbicara tentang repositori pribadi di sini - konsep nol-pengetahuan tidak masuk akal untuk repositori publik.
Pertanyaan saya adalah:
Apakah ada hambatan teknologi untuk membuat layanan hosting kode pengetahuan nol? Misalnya, apakah ada sesuatu tentang protokol jaringan yang digunakan oleh sistem kontrol versi populer seperti SVN, Mercurial, atau Git yang akan menyulitkan (atau tidak mungkin) untuk mengimplementasikan skema di mana data yang dikomunikasikan antara klien dan server dienkripsi dengan kunci server tidak tahu?
Apakah ada layanan hosting kode nol pengetahuan yang ada saat ini?
sumber
Jawaban:
Anda dapat mengenkripsi setiap baris secara terpisah. Jika Anda mampu membocorkan nama file dan perkiraan panjang garis serta nomor baris tempat perubahan garis terjadi, Anda dapat menggunakan sesuatu seperti ini:
https://github.com/ysangkok/line-encryptor
Karena setiap baris dienkripsi secara terpisah (tetapi dengan kunci yang sama), perubahan yang diunggah akan (seperti biasanya) hanya melibatkan baris yang relevan.
Jika saat ini tidak cukup nyaman, Anda bisa membuat dua repositori Git, satu dengan plaintext dan satu dengan ciphertext. Ketika Anda komit dalam repositori plaintext (yang bersifat lokal), sebuah hook komit bisa mengambil diff dan menjalankannya melalui jalur enkripsi yang dirujuk di atas, yang akan menerapkannya ke repositori ciphertext. Perubahan repositori ciphertext akan dilakukan dan diunggah.
Enkripsi baris di atas adalah SCM agnostik, tetapi dapat membaca file-file berbeda yang disatukan (dari plaintext) dan mengenkripsi perubahan dan menerapkannya pada ciphertext. Ini membuatnya dapat digunakan pada SCM apa pun yang akan menghasilkan Anda sebuah unified diff (seperti Git).
sumber
<IV>,<ciphertext>
.Saya tidak berpikir ada hambatan - pertimbangkan SVN, apa yang dikirim ke server untuk penyimpanan adalah delta antara versi kode Anda sebelumnya dan saat ini - jadi Anda mengubah 1 baris, hanya baris yang dikirim ke server. Server kemudian 'membabi buta' menyimpannya tanpa melakukan pemeriksaan data itu sendiri. Jika Anda mengenkripsi delta dan mengirimnya sebagai gantinya, tidak akan ada dampak pada server, bahkan Anda bahkan tidak perlu memodifikasi server sama sekali.
Ada bit lain yang mungkin penting, seperti properti data meta yang tidak mudah dienkripsi - seperti tipe mime - tetapi yang lain bisa dienkripsi, misalnya komentar di log riwayat, asalkan Anda tahu Anda harus mendekripsi mereka di klien untuk melihat. Saya tidak yakin apakah struktur direktori akan terlihat, saya pikir itu tidak akan terlihat karena cara SVN menyimpan direktori, tetapi kemungkinannya saya salah. Ini mungkin tidak masalah bagi Anda jika isinya aman.
Ini berarti Anda tidak dapat memiliki situs web dengan berbagai fitur tampilan kode, tidak ada browser repositori di sisi server atau penampil log. Tidak ada perbedaan kode, tidak ada alat peninjau kode online.
Sesuatu seperti ini sudah ada, sampai titik tertentu, Mozy menyimpan data Anda dienkripsi dengan kunci pribadi Anda (Anda dapat menggunakan sendiri, dan mereka membuat suara tentang "jika Anda kehilangan kunci Anda sendiri, terlalu buruk, kami tidak dapat mengembalikan data Anda untuk Anda ", tetapi itu lebih ditargetkan pada pengguna umum). Mozy juga menyimpan riwayat file Anda, sehingga Anda dapat mengambil versi sebelumnya. Di mana itu jatuh adalah bahwa unggahan adalah secara teratur, bukan checkin ketika Anda inginkan, dan saya percaya itu membuang versi lama ketika Anda kehabisan ruang penyimpanan. Tapi konsepnya ada, mereka bisa memodifikasinya untuk memberikan kontrol sumber yang aman menggunakan sistem yang ada
sumber
Aku benci melakukan salah satu dari jawaban 'ini tidak akan menjawab pertanyaanmu' ... tapi ..
Saya dapat memikirkan dua solusi siap yang harus mengatasi kekhawatiran ini.
Host server Git pribadi Anda sendiri. Kemudian taruh server itu pada VPN yang Anda beri akses anggota tim Anda. Semua komunikasi ke dan dari server akan dienkripsi, dan Anda tentu saja dapat mengenkripsi server di tingkat OS.
BitSync harus melakukan triknya juga. Semuanya akan dienkripsi, dan dalam jaringan besar yang akan tersedia dari mana saja. Mungkin sebenarnya aplikasi yang sangat bagus dari semua teknologi BitCoin / BitMessage / BitSync ini ..
Terakhir, orang-orang di https://security.stackexchange.com/ mungkin memiliki lebih banyak wawasan.
sumber
'git push ./syncedFolderActingAsServer/MyAwesomeProject/src/'
? Anda juga dapat melakukan izin level git, dll. Seseorang harus mencoba ini!Seperti yang saya pahami, cara
git pull
kerjanya adalah server mengirimi Anda file paket yang berisi semua objek yang Anda inginkan, tetapi saat ini tidak. Dan sebaliknya untukgit push
.Saya pikir Anda tidak dapat melakukannya seperti ini secara langsung (karena ini berarti server harus memahami objek). Yang bisa Anda lakukan adalah membiarkan server bekerja hanya dengan serangkaian file paket terenkripsi.
Untuk melakukannya
pull
, Anda mengunduh semua file paket yang ditambahkan sejak terakhirpull
, mendekripsi dan menerapkannya ke git repo Anda. Untuk melakukannyapush
, Anda harus terlebih dahulu melakukannyapull
, sehingga Anda mengetahui keadaan server. Jika tidak ada konflik, Anda membuat file paket dengan perubahan Anda, mengenkripsi dan mengunggahnya.Dengan pendekatan ini, Anda akan berakhir dengan sejumlah besar file paket kecil, yang akan sangat tidak efisien. Untuk memperbaikinya, Anda bisa mengunduh serangkaian file paket, mendekripsi, menggabungkannya menjadi satu file paket, mengenkripsi dan mengunggahnya ke server, menandainya sebagai pengganti untuk seri itu.
sumber