Tandatangan Digital
Setiap kemas kini perisian yang anda pasang, setiap PDF yang ditandatangani, setiap token JWT, setiap komit kod ditolak ke repositori Git utama, setiap sijil TLS yang membenarkan penyemak imbas anda mempercayai tapak web — semuanya disahkan dengan tandatangan digital. Primitif kriptografi ialah salah satu alat yang paling berguna yang dimiliki oleh pengkomputeran moden, dan ia menjawab soalan khusus: adakah sekeping data tepat ini datang daripada entiti khusus ini, tidak diubah?
Badan artikel penuh disediakan dalam bahasa Inggeris di bawah.
A digital signature ialah operasi kriptografi yang membuktikan sekeping data dihasilkan oleh pemegang kunci peribadi tertentu dan data itu tidak diubah suai sejak itu. Ia adalah analog digital bagi tandatangan tulisan tangan di atas kertas, tetapi dengan jaminan yang lebih kukuh: tandatangan itu terikat secara matematik pada data, dan memalsukannya tanpa kunci persendirian adalah tidak boleh dibuat secara pengiraan.
TTiga sifat
A tandatangan digital menyediakan:
- X1XPLZ9AXX1Z8XX1PLZ9AXX1. penandatangan memegang kunci persendirian yang sepadan.
- Integrity — sebarang pengubahsuaian data yang ditandatangani akan membatalkan tandatangan.
- Non-repudiation — penandatangan tidak boleh membuat pengesahan dengan boleh dipercayai kemudiannya, kerana pemegang kunci persendirian boleh menafikan dengan boleh dipercayai kemudiannya, kerana pemegang kunci persendirian boleh menafikan dengan boleh dipercayainya kemudiannya, kerana pemegang kunci persendirian boleh menafikan dengan boleh dipercayai kemudiannya, kerana pemegang kunci persendirian boleh menafikan dengan pastinya kemudiannya, kerana pemegang kunci persendirian boleh menafikan dengan boleh dipercayai kemudiannya, kerana pemegang kunci persendirian boleh menafikan dengan boleh dipercayai kemudiannya, kerana pemegang kunci persendirian boleh menafikan dengan boleh dipercayai kemudiannya, kerana pemegang kunci persendirian boleh menafikan dengan boleh dipercayai kemudiannya, kerana pemegang kunci persendirian boleh menafikan tandatangan dengan memegang kunci peribadi yang sepadan. tandatangan.
Cara tandatangan sebenarnya berfungsi
Idea naif — "menyulitkan data dengan kunci persendirian" — menangkap semangat tetapi bukan butirannya. Skim tandatangan sebenar cincang data dahulu, kemudian lakukan operasi tandatangan pada cincang. Hashing adalah penting: operasi tandatangan adalah perlahan dan berfungsi pada input kecil, tetapi data yang ditandatangani boleh menjadi megabait atau gigabait. Cincang memampatkan data bersaiz arbitrari ke dalam ringkasan saiz tetap, yang kemudiannya ditandatangani.
Aliran:
- Hitung
h = SHA-256(data)(atau cincangan selamat lain yang lain). X X - Edarkan (data, sig).
sig = tanda(h, priv).Tuntuk mengesahkan:
- Hitung
h' = SHA-256(data). - Verify
verify(h', sig, pub) == true.
Jika apa-apa dalam data berubah, h' akan berbeza daripada h dan pengesahan gagal. Jika tandatangan itu dihasilkan oleh sesiapa selain daripada pemegang kunci peribadi yang sepadan, pengesahan gagal.
Algoritma tandatangan biasa
- RSA dengan PSS atau PKCS#1 v1.5 padding — lebih lama tetapi masih digunakan secara meluas. PSS ialah pengesyoran moden.
- ECDSA pada lengkung NIST (P-256, P-384) — biasa dalam TLS dan tandatangan kod.
- Ed25519 — direka bentuk untuk skim keselamatan dan kelajuan moden. Kini lalai dalam OpenSSH, Signal, banyak penggunaan TLS.
- SLH-DSA, ML-DSA — skim tandatangan pasca kuantum; diseragamkan oleh NIST pada tahun 2024 (SLH-DSA berasaskan cincang / SPHINCS+, ML-DSA berasaskan kekisi / CRYSTALS-Dilithium).
Di mana anda menemui tandatangan digital
- XPLZ78ZLT7 Sijil ditandatangani oleh Pihak Berkuasa. kunci, menjamin pengikatan antara domain dan kunci awam.
- Kemas kini perisian. Sistem pengendalian dan pengurus pakej mengesahkan tandatangan pada pakej yang dimuat turun sebelum memasang. macOS, Windows, Debian, Arch — kesemuanya menolak pakej yang tidak ditandatangani daripada saluran rasmi.
- Code signing. Authenticode (Windows), Apple Developer ID, Android APK signing — tandatangan mengikat executable kepada pembangun mereka.
- Git PGPSH-based Git. tandatangan pada komitmen dan tag; GitHub memaparkan "Disahkan."
- JWT dan token OAuth. Penegasan identiti yang ditandatangani oleh pihak berkuasa yang mengeluarkan.
- Urus niaga mata wang kripto. Setiap transaksi Bitcoin atau Ethereum ditandatangani secara peribadi oleh pemilik kunci.
- PDF dan e-mel yang ditandatangani. S/MIME, PAdES dan mesej yang ditandatangani PGP.
Pengurusan kunci ialah bahagian yang sukar
Settledcryptography. Cabaran operasi adalah melindungi dan memutar kunci peribadi tanpa gangguan perkhidmatan. Kunci tandatangan kod yang bocor adalah malapetaka — penyerang boleh menandatangani perisian hasad sewenang-wenangnya yang OS akan percayai. Amalan terbaik moden:
- Jana kunci peribadi di dalam modul keselamatan perkakasan (HSM) — kunci tidak pernah wujud di luar cip khusus.
- Asingkan kunci tandatangan daripada kunci identiti jangka panjang (akar luar talian, tandatangan perantaraan dalam talian).XPLZ1 jadual tandatangan biasa
- XRXPLZ1 menerbitkan pembatalan apabila dikompromi.
- Audit setiap operasi tandatangan.
Mengesahkan tandatangan dengan betul
TTiga perangkap halus yang telah menyebabkan CVE sebenar:
- Mengesahkan kunci yang salah. Tandatangan hanya boleh dipercayai seperti alasan anda mempercayai kunci awam adalah yang betul. Pengesahan luar jalur, log ketelusan utama atau kepercayaan pada penggunaan pertama ialah jawapan praktikal.
- TMemercayai medan algoritma. Sesetengah format token (JWT awal) membenarkan penandatangan menentukan algoritma. Penyerang mengeksploitasi ini dengan mendakwa "alg=none" dan memintas pengesahan tandatangan sepenuhnya. Pengesah mesti menyematkan algoritma yang dijangkakan.
- Gagal mengesahkan tandatangan meliputi data yang betul. Tandatangan pada cincang dokumen tidak membuktikan apa-apa jika anda boleh menukar dokumen mana yang dibentangkan dengan tandatangan yang mana.
Selesai yang betul, asas tandatangan digitalPLZ4X Internet yang betul.
Soalan lazim
- Bagaimanakah tandatangan digital berbeza daripada penyulitan?
- Penyulitan memastikan data sulit. Menandatangani membuktikan asal dan integriti data tetapi tidak menyembunyikannya. Banyak protokol menggabungkan kedua-duanya: menyulitkan untuk memastikan kandungan peribadi, tandatangan untuk membuktikan keaslian. Mereka menggunakan kunci yang berbeza, selalunya algoritma yang berbeza.
- Bolehkah tandatangan digital dipalsukan?
- Bukan tanpa kunci peribadi. Kekuatan kriptografi adalah sama dengan primitif asas (Ed25519 pada dasarnya tidak boleh dipalsukan dalam amalan). Laluan pemalsuan yang realistik: mencuri kunci persendirian, mengeksploitasi penjana nombor rawak yang lemah semasa menandatangani (mod kegagalan klasik ECDSA) atau menandatangani perkara yang salah melalui pepijat pengesahan.
- Mengapakah kita mencincang sebelum menandatangani dan bukannya menandatangani data secara langsung?
- Dua sebab: tandatangan lambat pada input besar dan algoritma tandatangan mempunyai had saiz mesej. Cincang memampatkan data sewenang-wenangnya ke dalam nilai saiz tetap yang boleh ditandatangani oleh algoritma dengan cekap. Sifat keselamatan dipegang kerana fungsi cincang tahan perlanggaran.
- Apakah perbezaan antara tandatangan digital dan tandatangan elektronik?
- Tandatangan elektronik ialah istilah undang-undang — sebarang tanda yang menunjukkan persetujuan atau pengarang, termasuk menaip nama anda. Tandatangan digital ialah istilah kriptografi — operasi matematik tertentu. Banyak tandatangan elektronik tidak mempunyai kriptografi; banyak tandatangan digital tidak diiktiraf di mahkamah tanpa upacara tambahan. Kedua-dua istilah itu bertindih tetapi bukan sinonim.
- Adakah tandatangan digital membuktikan tarikh dokumen ditandatangani?
- Bukan sendiri. Anda memerlukan <em>trusted timestamp</em> yang berasingan daripada Pihak Berkuasa Setem Masa, atau notari melalui perkhidmatan cap waktu awam (OpenTimestamps menulis kepada blockchain Bitcoin). Menandatangani sahaja membuktikan "tandatangan ini telah dihasilkan pada suatu masa sebelum ini," bukan pada bila-bila masa tertentu.