Tidak ada basis data pusat

31

Saya memiliki klien yang ingin membangun situs web / aplikasi seluler / aplikasi desktop yang berhubungan dengan data yang sangat sensitif (lebih sensitif daripada rincian bank / kartu). Karena sifat sensitif dari data, mereka tidak ingin menyimpannya di database pusat tetapi mereka masih ingin aplikasi mereka untuk disinkronkan (katakanlah saya menambahkan beberapa data ke dalam aplikasi seluler saya, saya kemudian ingin dapat pergi ke saya aplikasi desktop dan lihat data yang sama).

Saya tidak bisa memikirkan cara yang bagus dan dapat diandalkan untuk melakukan ini dan saya tidak yakin ada satu. Itu sebabnya saya di sini. Adakah yang tahu bagaimana saya bisa menangani data ini?

Salah satu solusi yang saya pikirkan adalah memiliki database sisi klien pada setiap aplikasi yang entah bagaimana akan menyinkronkan antara aplikasi, saya bisa melihat ini menjadi sangat tidak dapat diandalkan dan semakin berantakan.

pengguna2424495
sumber
2
Jika Anda ingin data disinkronkan, masih harus diakses di suatu tempat, sehingga data dapat ditarik ke dalam aplikasi Anda. Anda bisa membagi data di antara lebih banyak database, jadi jika salah satu dari mereka entah bagaimana dilanggar, Anda tidak akan membocorkan semua data Anda. Jika ini memuaskan pelanggan, tambahkan lebih banyak koneksi database ke aplikasi Anda dan tarik data Anda dari mereka.
Andy
2
Apakah ini masalah peer to peer? atau hanya 1 desktop berbicara dengan 1 ponsel pintar (untuk setiap ruang data)?
ebyrob
7
Anda bisa memastikan kerahasiaan dalam database dengan mengenkripsi data di server dengan kunci yang hanya diketahui pengguna.
Philipp
26
Ini terdengar seperti skema yang dipikirkan seseorang yang tidak mengerti keamanan. Siapa pun yang datang dengan persyaratan ini harus merumuskan pertanyaan tentang pengamanan data di Security.SE .
jpmc26
4
@ user2424495: Jika data harus tersedia melalui situs web, data harus tersedia dari mana situs web Anda dilayani - yang biasanya merupakan server pusat. Atau Anda harus menulis plugin browser yang memasok data sisi klien.
Bergi

Jawaban:

60

Banyak informasi sensitif disimpan dalam basis data. Bahkan, database pusat mungkin merupakan cara paling aman untuk menyimpan data ini. Basis data perusahaan besar memiliki banyak fungsi untuk melakukan hal-hal seperti mengenkripsi informasi sensitif, untuk mengaudit siapa yang mengaksesnya, untuk membatasi atau mencegah orang-orang termasuk DBA dari melihat data, dll. Anda tidak kehilangan data. Hampir pasti akan jauh lebih mudah untuk mengkompromikan data yang disimpan pada beberapa perangkat seluler atau laptop pengguna acak daripada menembus infrastruktur keamanan yang dirancang dengan baik dan kompromi dengan database pusat yang tepat.

Anda bisa mendesain sistem dengan database pusat yang hanya menyimpan data terenkripsi dan menyimpan kunci pribadi pengguna di perangkat pengguna. Dengan cara itu bahkan jika database pusat sepenuhnya dikompromikan, data hanya dapat digunakan oleh pengguna. Tentu saja, itu berarti bahwa Anda tidak dapat mengembalikan data pengguna jika kehilangan kunci mereka (misalnya, satu-satunya salinan ada di telepon mereka dan telepon mereka rusak). Dan jika seseorang kompromi kunci dan, mungkin, kredensial login mereka, mereka akan dapat melihat data.

Gua Justin
sumber
24
@ user2424495 - Jika tujuannya adalah keamanan yang sebenarnya, menyimpan data secara terpusat hampir pasti menang. Dari sudut pandang pemasaran, mungkin bukan salah Anda jika telepon seseorang diretas. Tapi itu pasti akan berdampak buruk pada aplikasi jika tersiar kabar bahwa itu relatif mudah untuk diretas (karena kebanyakan sistem orang sangat tidak aman). Saya lebih suka menjelaskan kepada orang-orang bahwa data mereka disimpan dienkripsi menggunakan keamanan kelas militer daripada berharap bahwa mereka tidak menyalahkan saya ketika telepon mereka yang tidak aman di-hack.
Justin Cave
27
Sejauh ini, inilah satu-satunya jawaban yang benar-benar menjawab pertanyaan dan memberikan hasil keamanan sebaik mungkin. Persyaratan yang diberikan OP itu menggelikan. Jika data sangat sensitif sehingga gagasan data bahkan tersedia melalui jaringan publik menyinggung pengguna, maka gagasan aplikasi tidak realistis. Titik. Perangkat klien tidak aman dan tidak dapat dipercaya.
maple_shaft
2
@ mharr jika database hanya menyimpan data yang dienkripsi (dienkripsi sebelum meninggalkan perangkat) tidak peduli apa yang dikatakan perintah pengadilan, secara fisik tidak dapat didekripsi tanpa kunci enkripsi, yang hanya dimiliki oleh pengguna.
Richard Tingle
9
@RichardTingle <tinfoil> Kecuali jika lembaga pemerintah telah melanggar enkripsi. </tinfoil>
Bob
3
Saya tidak pernah mengatakan bahwa masalahnya tidak "menarik", saya menemukan pertanyaan dan jawaban sejauh ini sangat menarik dan pemikiran yang menggugah. Ini PERSIS jenis pertanyaan yang membuat situs ini hebat. Saya benar-benar mempertanyakan persyaratan dan beberapa asumsi yang mungkin dibuat tentang data. Perasaan spidey saya hanya berteriak kepada saya bahwa persyaratan dan asumsi tentang pentingnya data ini adalah renungan dari sebuah perusahaan yang memuja dan menyembah diri sendiri yang menganggap dirinya terinformasi dan berwawasan luas tetapi dalam kenyataannya ...
maple_shaft
38

Anda perlu membuat cadangan beberapa langkah dan, setelah berkonsultasi dengan klien Anda, buat model ancaman . (Ya, itu tautan ke buku setebal 600 halaman; ya, saya serius menyarankan Anda membaca semuanya.)

Model ancaman dimulai dengan mengajukan pertanyaan seperti

  • Mengapa aplikasi perlu menyimpan data sensitif ini?
    • Bisakah Anda menghindari menyimpannya sama sekali?
    • Bisakah itu dibuang setelah waktu yang singkat?
    • Apakah itu benar-benar harus dapat diakses oleh lebih dari satu perangkat?
    • Jika harus dapat diakses di lebih dari satu perangkat, apakah perlu disimpan di lebih dari satu perangkat?
  • Siapa orang yang diizinkan melihat data sensitif setiap pengguna?
    • Bisakah daftar ini dibuat lebih pendek?
  • Siapa orang yang dapat melakukan kontak dengan data sensitif masing-masing pengguna saat mencoba melakukan pekerjaan mereka, tetapi tidak perlu mengetahuinya?
    • Bisakah daftar ini dibuat lebih pendek?
    • Dapatkah data ini diberikan tidak dapat diakses oleh mereka tanpa merusak kemampuan mereka untuk melakukan pekerjaan mereka?
    • Jika tidak bisa diakses, bisakah setidaknya dibuat tidak bisa dipahami? (Inilah yang dilakukan enkripsi, secara abstrak: enkripsi membuat data tidak dapat dipahami.)
  • Siapa orang yang ingin melihat data sensitif, tetapi tidak diizinkan?
    • Peluang apa yang mereka miliki untuk mendapatkan data?
    • Apa yang ingin mereka lakukan dengan data begitu mereka memilikinya?
    • Bagaimana mereka akan marah jika mereka tidak mendapatkan apa yang mereka inginkan?
    • Berapa banyak uang, waktu, siklus CPU, dan upaya manusia yang bersedia mereka keluarkan?
    • Apakah mereka peduli jika ada yang tahu mereka telah melihat data?
    • Apakah mereka ingin mengakses data sensitif pengguna tertentu , atau akankah orang lain melakukannya?
    • Apa yang sudah mereka ketahui?
    • Apa yang sudah mereka akses?

Setelah Anda tahu jawaban atas pertanyaan-pertanyaan ini, Anda akan berada di tempat yang jauh lebih baik untuk mencari tahu apa yang harus dilakukan.

Ingatlah bahwa mungkin ada lebih dari satu jawaban untuk setiap rangkaian pertanyaan, terutama yang berhubungan dengan penyerang (orang-orang yang menginginkan data sensitif tetapi tidak diizinkan untuk memilikinya). Jika Anda tidak dapat memikirkan setidaknya setengah lusin penyerang pola dasar yang berbeda , dengan motivasi, tujuan, dan sumber daya yang berbeda, Anda mungkin melewatkan sesuatu.

Juga perlu diingat bahwa penyerang yang menyebabkan Anda (dan / atau klien) masalah paling besar, adalah yang paling mungkin membuat percikan raksasa di media jika serangan mereka berhasil, atau yang melakukan jumlah kerusakan agregat terbesar , mungkin adalah bukan penyerang yang dapat menyebabkan kerugian terbesar bagi pengguna individu jika serangan mereka berhasil. Perusahaan klien Anda secara rasional lebih peduli tentang kerusakan agregat, tetapi pengguna secara rasional lebih peduli tentang kerusakan pada diri mereka sendiri.

zwol
sumber
4
Ini tidak benar-benar mencoba menjawab pertanyaan atau membantahnya, tetapi ini benar-benar jawaban yang luar biasa untuk pertanyaan yang tidak diajukan.
maple_shaft
11
@maple_shaft: Ya, itu menjawab pertanyaan yang ingin ditanyakan oleh OP. Karena pertanyaan itu dapat dilihat sebagai masalah XY , ini sepertinya jawaban yang bagus.
sleske
8

Salah satu opsi untuk melakukan sinkronisasi adalah melakukannya secara peer-to-peer. Ini masih akan memerlukan server pusat, tetapi server itu tidak akan menangani data apa pun.

Saat perangkat online, server pusat mendapat pemberitahuan dengan id pengguna. Ketika perangkat kedua dari pengguna yang sama online, server mengirim kedua perangkat alamat IP yang lain. Perangkat kemudian dapat bertukar data secara langsung. Peringatan: satu perangkat perlu bertindak sebagai server, jadi setidaknya satu tidak dapat berada di belakang router NAT.

Jangan lupa bahwa Anda akan memerlukan otentikasi dan enkripsi yang kuat untuk mekanisme notifikasi dan pertukaran peer-to-peer.

Philipp
sumber
1
Kedengarannya seperti skema versi juga akan diperlukan untuk menghindari pengiriman semua data bolak-balik sepanjang waktu antara kedua perangkat ...
ebyrob
Pertukaran p2p akan menjadi solusi yang bagus, jika bukan karena kebutuhan pengaturan yang tidak perlu memaksa pengguna akhir, yang, menurut pendapat saya, akan membuat penggunaan aplikasi kurang ramah pengguna. Lalu ada pertanyaan, apakah pelanggan ingin memilih antara kerentanan data dan sedikit keributan saat menyiapkan aplikasi, yang sangat tergantung pada seberapa tepatnya sensitifnya data dan seberapa besar perhatian pengguna.
Andy
1
@ Davidvider dengan asumsi Anda mengatur dan memelihara server pertama, apa langkah-langkah pengaturan tambahan?
ebyrob
@ebyrob Saya mungkin disalahpahami, tetapi saya mengerti bahwa server yang disediakan oleh pembuat aplikasi tidak melakukan apa pun kecuali prosedur untuk sinkronisasi p2p. Tetapi data harus ditarik melalui server ini dari salah satu perangkat klien - dan klien harus membuat dirinya sendiri, atau datanya, dapat diakses - ini adalah pengaturan yang telah saya bicarakan.
Andy
1
@ David, Philipp menyarankan pertukaran data sensitif dari rekan ke teman, sehingga tidak ada pengiriman ke atau bahkan melalui server pusat. Server pusat hanya ada untuk memfasilitasi satu rekan menemukan rekan lain; kemudian keluar dari jalan.
Erik Eidt
5

Jadikan itu masalah orang lain.

Simpan data secara lokal di setiap aplikasi, lalu beri pengguna opsi untuk mengaktifkan sinkronisasi menggunakan akun mereka sendiri dengan layanan pihak ketiga (Dropbox, Google Drive, dll). Juga, pikirkan mengenkripsi data apa pun yang diunggah ke layanan pihak ketiga (ada pro dan kontra untuk melakukan itu).

Hal ini memberikan tampilan yang pengguna memiliki data mereka sendiri, karena mereka harus ke sinkronisasi data opt-in. Itu membuat aplikasi berguna untuk orang yang tidak ingin berbagi terjadi. Dan itu membuat orang lain bertanggung jawab (secara teknis dan, berpotensi, secara hukum) untuk sakit kepala yang berkelanjutan untuk menjaga keamanan data bersama.

James Mason
sumber
1

Kekhawatiran klien Anda tampaknya tentang visibilitas data ini. pertanyaan pertama yang diajukan kepada pelanggan Anda adalah apakah data itu dienkripsi, di mana bisa disimpan? Kemudian, tanyakan kepada pelanggan Anda kontrol akses seperti apa yang mereka inginkan sebelum data dapat didekripsi dan diproses - di mana kunci dekripsi disimpan? Apakah kunci terpisah per pengguna? dll ...

Jika pelanggan Anda tidak ingin data disimpan di mana saja, apakah mereka ingin pengguna memasukkannya ke tangan saya setiap kali?

Michael Shaw
sumber