Допис
Діліться своїми знаннями.
Настав час zk. Давайте будемо дивними ^^
Гей
«Я щось знаю, але я не скажу тобі чого, і все ж ти все одно повіриш мені. » ✨
Уявіть собі це:
Ви підтверджуєте, що працюєте в певній компанії. ✅ Не розкриваючи свою електронну пошту. ✅ Без доксування вашої особистості Web2. ✅ Повністю перевірений в мережі.
Це сила доказів нульових знань (zk proof), і вам більше не потрібен доктор філософії з криптографії, щоб почати будувати з ними. Ласкаво просимо у світ ZkApps: програми, що працюють на криптографічній магії, але створені за допомогою інструментів, які нагадують написання звичайного коду.
Що таке ZkApp (додаток з нульовими знаннями)?
ZkApp - це програма, де користувачі можутьдовести щось про свої приватні дани, не розкриваючи самих даних. Подумайте про це як про розгинання квитанцій... без показу свого гаманця.
Ці програми забезпечують функціональність, про яку ми часто лише мріємо - наприклад, підтвердження особистості когось, не розкриваючи його імені, або дозволяючи користувачам голосувати в мережі, не розкриваючи свого фактичного голосу.
В екосистемі Sui zkApps набувають додаткового рівня потенціалу. Вони поєднують ваші секрети поза ланцюгом з логікою в мережі, використовуючи такі інструменти, якSP1 zKVMтаSoundness Layer, щоб зробити генерацію та перевірку доказів більш практичними, ніж будь-коли.
Традиційнонаписання схеми zk вимагало криптографічної експертизи та тижнів effort. Але ZKVM, такі як SP1, Risc0 та Nexus, перевернули гру. Ці віртуальні машини дозволяють розробникам висловлювати свою логіку звичайними мовами програмування, генерувати**zk proof для результату та надсилати його для перевірки в ланцюжку.
Ця абстракція не просто прискорює розвиток, вона розширює, хто може створювати zkApps. Якщо ви можете писати логіку в Rust, ви можете побудувати ZkApp. І якщо ви використовуєтеSoundness Layer, ви можете перевірити це на Sui.
#ZKDomain: Підтвердження права власності на електронну пошту без експозиції
Розглянемо поширений сценарій того, що DAO хоче аердропувати токени співробітникам конкретної компанії.
Але замість того, щоб збирати електронні листи користувачів та перевіряти їх вручну, що розкриває особистість Web2 та ризикує конфіденційність користувачів, ми хочемо, щоб користувачідовели, що вони володіють електронною поштою за адресою @soundness .xyz**, ніколи не розкриваючи повну адресу.
Ось тут вступає реальна магія zk.
Якщо у вас є доступ до електронної пошти компанії, яка використовуєGoogle Workspace, ви можете пройти автентифікацію за допомогоюOpenID Connect (OIDC) та отримати від Google підписаний JWT (веб-маркер JSON)**. Цей маркер містить метадані, включаючи вашу електронну пошту.
Тепер замість того, щоб надсилати цей JWT до DAO, вигенеруєте доказ zk, який говорить: «У мене є дійсний JWT, виданий Google**, імій електронний лист закінчується на @soundness .xyz». Цей доказ перевіряється в мережі. Ніхто ніколи не бачить вашу справжню електронну пошту. DAO бачить лише те, що доказ пройшов.
Доступ надано.
Вся логіка перевірки JWT, перевірка підпису, перевірка домену виконується всередині програми zKVM, написаної на Rust, складеної SP1.
Ви можете заглянути в повну реалізацію тут:
#![no_main]
sp1_zkvm::entrypoint!(main);
use lib::{split_email, split_jwt, pem_to_der};
use rsa::{pkcs8::DecodePublicKey, Pkcs1v15Sign, RsaPublicKey};
use sha2_v0_10_8::{Digest, Sha256};
pub fn main() {
// Read input values: JWT token, RSA public key, and the expected domain
let token = sp1_zkvm::io::read::<String>();
let rsa_public_key = sp1_zkvm::io::read::<String>();
let domain = sp1_zkvm::io::read::<String>();
// Commit the domain to the zk proof (so it’s publicly known)
sp1_zkvm::io::commit(&domain);
// Split the JWT into its components: header, payload, and signature
let (header, payload, signature) = split_jwt(&token)
.expect("Failed to decode JWT"); // Panic if JWT parsing fails
// Convert the PEM public key into DER format for RSA verification
let pk_der = pem_to_der(&rsa_public_key);
let public_key = RsaPublicKey::from_public_key_der(&pk_der).unwrap();
// Reconstruct the signing input (header + payload) as a string
let signing_input = format!(
"{}.{}",
token.split('.').collect::<Vec<&str>>()[0], // First part: header
token.split('.').collect::<Vec<&str>>()[1] // Second part: payload
);
// Hash the signing input using SHA256
let mut hasher = Sha256::new();
hasher.update(signing_input);
let hashed_msg = hasher.finalize();
// Verify the JWT signature using the provided RSA public key
let verification_result = match public_key.verify(Pkcs1v15Sign::new::<Sha256>(), &hashed_msg, &signature) {
Ok(_) => true, // Signature is valid
Err(_) => false, // Signature is invalid
};
// Commit the verification result (proof that the JWT is authentic)
sp1_zkvm::io::commit(&verification_result);
// Extract and split the email address from the JWT payload
let email_parts = split_email(payload.get("email").unwrap().to_string()).unwrap();
// Check if the email domain matches the expected domain
let verified = email_parts.domain == domain;
// Commit the verification result (proof that the email domain is correct)
sp1_zkvm::io::commit(&verified);
}
Тільки домен і чи був JWT дійсним чи ні. Ось і все. Повна електронна пошта користувача, оригінальний JWT та будь-яка інша особиста інформація залишається прихованою, криптографічно запечатаною всередині доказу.
##Перевірка в мережі: від zKVM до Move
Звичайно, створення доказів - це лише одна сторона медалі. Справжня утиліта запускається, коли ви можете перевірити цей доказ у мережі та вжити заходів на основі цього.
Ось деРівень звучаннязмінює гру. Створений для Sui, він діє як верифікаційний шар zk, який може обробляти докази, створені SP1, перетворений у формат Groth16, який Sui підтримує. Вам не потрібно возитися з криптографічними примітивами. Ви просто пишете смарт-контракт у Move, передаєте докази та публічні вхідні дані (наприклад, очікуваний домен), а решту дозволяєте логіці верифікатора.
Це означає, що ваш смарт-контракт DAO тепер може здійснювати аеродропи на основі володіння доменом електронної пошти, не торкаючись конфіденційних даних. Рівень добротності обробляє перевірку. Ваш розумний контракт справляється з логікою. Решта — магія.
Дізнайтеся більше про рівень звучності тут:
🔗 звучність.xyz/блог/звуковий шар
Ви можете створювати потоки аутентифікації без паролів. Ви можете розробити системи голосування, які гарантують анонімність. Ви можете отримати доступ до DAO, подій або винагород на основі критеріїв, які залишаються повністю приватними.
І що найважливіше, ви можете зробити все це за допомогоюRust + Sui + SP1 + Soundness Layer— без написання жодного криптографічного обмеження вручну.
Ми більше не говоримо про теоретичний zk. Ми говоримо про zk, який ви можете доставити. Тому що конфіденційність - це не просто функція, це основа. А з zk це нарешті можна скласти.
- Sui
- SDKs and Developer Tools
- Security Protocols
Мені подобається, що принцип zk починає захоплювати світ. Незабаром нам не потрібно буде відкривати очі, щоб знати, що світ існує 😵💫