Sui.

Допис

Діліться своїми знаннями.

article banner.
harry phan.
Apr 30, 2025
Стаття

Настав час 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.

Ви можете заглянути в повну реалізацію тут:

👉 Приклад домену SP1 ZK

#![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
2
Поділитися
Коментарі
.
HaGiang.
Apr 30 2025, 14:20

Мені подобається, що принцип zk починає захоплювати світ. Незабаром нам не потрібно буде відкривати очі, щоб знати, що світ існує 😵‍💫

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

306Пости450Відповіді
Sui.X.Peera.

Зароби свою частку з 1000 Sui

Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.

Кампанія винагородЧервень
      Ми використовуємо файли cookie, щоб гарантувати вам найкращий досвід на нашому сайті.
      Детальніше