Tentang apa ini?
Gagasan untuk membuat proyek Internet kecil saya sendiri untuk melindungi dokumen dari pemalsuan didorong oleh sebuah diskusi di forum defectoscopists yang didedikasikan untuk pemalsuan total kesimpulan kontrol kualitas yang mereka keluarkan.
Selama implementasi proyek saya, saya menyadari bahwa saya datang ke konsep tanda tangan digital elektronik, yaitu, sepeda, tentu saja, saya tidak menciptakan, tetapi cerita tentang jalan saya bisa menjadi pelajaran.
Relevansi tugas perlindungan terhadap pemalsuan
Faktanya adalah bahwa di abad ini informasi tanpa kertas, bukan konstruksi modal tunggal, baik pipa gas atau pusat perbelanjaan, dapat dilakukan tanpa menyiapkan set lengkap dokumentasi yang dibangun, yang mencakup kesimpulan pengujian non-destruktif (visual, radiografi, ultrasound).

Kesimpulan ini adalah dokumen yang dibuat pada formulir tertentu dengan kesimpulan tentang kesesuaian atau ketidaksesuaian, misalnya, lasan. Layanan pengujian non-destruktif membutuhkan biaya, dan seringkali cukup besar. Pelanggan / perantara yang tidak bertanggung jawab dapat menyewa laboratorium terakreditasi, menerima beberapa pendapat darinya, dan menghentikan atau menangguhkan pekerjaan.
Bayangkan kejutan dari operator detektor cacat atau kepala laboratorium, ketika mereka mengetahui bahwa bahkan setelah pemutusan kerja, kesimpulan dikeluarkan atas nama mereka, mereka mengenakan segel palsu dan tanda tangan palsu. Reputasi laboratorium menderita, dan kenyataannya hukum dilanggar. Hanya saja dalam sejumlah kasus tidak ada yang akan mengetahuinya.
Sebagai bagian dari diskusi - bagaimana melindungi dokumen Anda, ide itu dinyatakan untuk meletakkan kode QR pada dokumen di mana nomor kesimpulan, tanggal dan kesimpulan tentang kesesuaian atau ketidaksesuaian objek kontrol akan direkam. Mengapa metode ini baik - kode QR akan tetap dapat dibedakan dengan jelas saat memindai, menyalin dokumen.
Namun, scammers juga dapat dengan mudah menghasilkan kode QR dengan konten yang diperlukan.
Lahirnya sebuah ide
Dan kemudian sebuah pemikiran muncul pada saya - mengapa tidak mengenkripsi konten kode QR dengan algoritma yang andal. Jika demikian, Anda harus menemukan cara mendekripsi saat memindai, misalnya, melalui kamera ponsel cerdas. Di sini lahir ide untuk melakukan dekripsi di sisi layanan web, yang akan menyimpan kunci dekripsi.
Terakhir kali saya membuat situs pada tahun 2000 di notepad dan saya tidak terlalu akrab dengan teknologi pembangunan situs modern, jadi saya memilih Wix, berpikir bahwa dengan bantuan layanan saya akan mendapatkan gambar yang indah dan kemungkinan minimal untuk bekerja dengan database, dan dengan kode Wix saya akan menyandikan itu apa yang saya butuhkan
Saya harus segera mengatakan bahwa saya melakukannya tanpa banyak kesulitan dan dalam beberapa malam, sebagai seorang amatir, saya dapat mengumpulkan solusi yang saya butuhkan dari blok yang sudah jadi.
Enkripsi
Saya mengambil
algoritma enkripsi AES 128-bit yang telah selesai dengan implementasi Java Script di Github dan menempatkannya di bagian backend situs.
Ini mungkin bagian pekerjaan yang paling mudah. Cara kerja enkripsi itu sendiri tidak sepenuhnya tidak menarik bagi saya. Saya khawatir tentang kemegahan rencana itu.
Hal utama adalah jangan lupa untuk menerjemahkan teks yang dikodekan ke dalam Bytes, dan hasil enkripsi dalam HEX.
// Convert text to bytes var textBytes = aesjs.utils.utf8.toBytes(text); // The counter is optional, and if omitted will begin at 1 var aesCtr = new aesjs.ModeOfOperation.ctr(key, new aesjs.Counter(5)); var encryptedBytes = aesCtr.encrypt(textBytes); // To print or store the binary data, you may convert it to hex var encryptedHex = aesjs.utils.hex.fromBytes(encryptedBytes);
Pembuatan kode QR
Saya menggunakan
API yang sudah jadi .
Untuk bekerja, cukup buat objek html1 - untuk menampilkan kode html sewenang-wenang dan memanggil fungsi API
let val = “ " $w("#html1").src = "https://api.qrserver.com/v1/create-qr-code/?size=100x100&data=" + val.toString(); $w("#html1").show();
Bekerja dengan pengguna
Wix mendukung registrasi pengguna dasar dan fitur pengeditan profil. Alat ini agak buggy, tetapi bisa diterapkan.
Saya hanya perlu menambahkan bidang yang menggambarkan nama organisasi yang diwakili oleh pengguna terdaftar, tetapi bidang ini hanya baca dan diisi oleh administrator layanan ketika menerima konfirmasi bahwa pengguna terdaftar benar-benar mewakili organisasi yang ditentukan.
Itu juga diperlukan untuk mempercepat logika paling sederhana yang terkait dengan akses berbayar / gratis ke berbagai fungsi (hingga 20 dokumen per bulan dapat dilindungi secara gratis) dan istilah untuk membayar layanan.
Prinsip kerja
Kunci enkripsi pribadi yang unik terikat ke akun pengguna.
Pengguna yang masuk mengisi formulir dengan informasi tentang kesimpulan (nomor, tanggal, hasil):

Kemudian algoritme mengembalikan URL yang berisi teks sandi TEXT dan bertindak sebagai kunci publik USER_ID, seperti dalam contoh di bawah ini:
https:// * * /checkqr?user=3b01b0aa-68a0-4521-ab12-f17b86d3eabc&v=1.0&text=8a026594c26be959f4280e28fe8402c1acef233e369a31613d654d3b0a5bbaca206f3058d27d2fde66b65cb64a5a6caecb69b07ad39c0015e923dad89eb723
URL berubah menjadi kode QR, yang sudah dimasukkan pengguna pada dokumennya dengan menyalinnya ke clipboard (Anda dapat memasukkannya dalam file sumber atau menempelkannya sebagai stiker pada dokumen yang sudah jadi).

Yang penting di sini adalah bahwa informasi tersebut tidak masuk ke basis data situs, tetapi tetap hanya dalam bentuk tautan ini dan kode QR yang berisi tautan ini. Dengan demikian, tidak ada informasi tentang isi dokumen yang dilindungi disimpan di server.
Kode diperiksa oleh situs saat mengurai tautan
Untuk parsing ketika situs mengenali tautan, saya menggunakan bantuan pada kode Wix
www.wix.com/code/reference/wix-http-functions.htmlJika terjadi kesalahan selama dekripsi, bisa jadi jika beberapa perubahan dilakukan pada kode QR asli
“Kode dokumen didekripsi dengan kesalahan. Kemungkinan palsu. Hubungi organisasi yang menyiapkan dokumen untuk klarifikasi. "
Jika dekripsi berhasil diselesaikan, maka teks dekripsi dikeluarkan yang berisi nama laboratorium, nomor dokumen, tanggal penerbitan dan hasil, dan pengguna diminta untuk membandingkan hasil dekripsi dengan apa yang dilihatnya pada dokumen asli.
Kesimpulan
Dari sejak lahirnya ide itu, saya sampai pada implementasi kerja dengan sejumlah batu bata yang sudah jadi.
Saya mengundang Anda untuk berdiskusi tentang ide yang saya ajukan, upaya untuk menguji / meretas layanan saya.
Apa yang masih harus diselesaikan
Tulis hasil implementasi pada habr- Pahami cara mengatur ulang kueri jika sudah ada pemeriksaan tautan satu kali
- Untuk mengetahui cara mengecilkan ciphertext, karena ketika URL panjang dikodekan, maka ukuran kode QR terlalu besar
- Tambahkan kemampuan untuk menyalin kode ke clipboard atau mengirimnya melalui email di klik tombol (sampai saya menemukan cara melakukannya dalam javascript)
- Tingkatkan kerja dengan versi seluler
Respons awal terhadap kemungkinan kritik:
Bukankah lebih mudah bagi laboratorium untuk menyimpan daftar kesimpulan di situs webnya, dan apakah tag QR yang sama akan mengarah ke registri ini atau bahkan menampilkan salinan laporan?
Ini bisa dilakukan, tetapi pekerjaan manual yang signifikan atau pengenalan solusi TI Anda sendiri seperti yang dikembangkan oleh saya akan diperlukan, tetapi jelas akan lebih mahal daripada menggunakan solusi yang sudah jadi.
Tidak mungkin membuat register semacam itu benar-benar dapat diakses publik, karena informasinya tidak untuk umum, tetapi hanya dapat dipertimbangkan oleh kontraktor, pelanggan, dan Rostekhnadzor.