Layanan Verifikasi
Modul Verifikasi menyediakan alat untuk membuat, menyajikan, dan memverifikasi Kredensial yang Dapat Diverifikasi (VC) dan Presentasi yang Dapat Diverifikasi (VP) di blockchain IDCHAIN.
Hal ini memungkinkan pengungkapan selektif, verifikasi berbasis tantangan, dan validasi bukti.
Ringkasan
Layanan Verifikasi memungkinkan pengembang untuk:
- Buat Presentasi yang Dapat Diverifikasi (VP) untuk berbagi kredensial.
- Dapatkan bukti dengan pengungkapan selektif (termasuk atau kecualikan klaim).
- Verifikasi presentasi (dengan tantangan dan pemeriksaan domain).
- Verifikasi kredensial individu.
Semua verifikasi menggunakan pemeriksaan kriptografi dan resolusi on-chain untuk DID, skema, dan status kredensial.
Referensi API
Atur Presentasi
Verification.setPresentation(credential, holder, validUntil, options?): Promise<VerifiablePresentation>
Membuat Presentasi yang Dapat Diverifikasi dari kredensial, secara opsional hanya mengungkapkan klaim yang dipilih.
Parameter:
credential(VerifiableCredential): Kredensial yang diterbitkan untuk ditunjukkan.holder(HolderOptions): Objek yang berisi:uidDocument: Dokumen DID Pemegang.signers: ArrayUidKeyringPairuntuk menandatangani presentasi.validUntil(Date): Tanggal kedaluwarsa presentasi.optional(opsional):challenge(string): Tantangan acak untuk perlindungan pemutaran ulang.includeClaims(string[]): Jalur klaim yang akan diungkapkan (misalnya,["/NIK"]).excludeClaims(string[]): Jalur klaim yang akan disembunyikan.
Pengembalian:
VerifiablePresentation: Presentasi yang ditandatangani dan sesuai dengan W3C.
Contoh:
const vp = await Verification.setPresentation(
vc,
{
uidDocument: userDid.document,
signers: [userAccount],
},
new Date(Date.now() + 10 * 60 * 1000),
{
includeClaims: ["/NIK"], // Only reveal NIK
challenge: "random-challenge",
}
);
console.log("Verifiable Presentation:", vp);
Verifikasi Presentasi
Verification.verifyPresentation(presentation, options?): Promise<any>
Memverifikasi Presentasi yang Dapat Diverifikasi, memeriksa bukti, tantangan, dan kredensial yang mendasarinya.
Parameter:
presentasi(VerifiablePresentation): VP yang akan memverifikasi.opsi(opsional):challenge(string): Harus cocok dengan yang digunakan di setPresentation.domain(string): Batasan domain (opsional).verifier(Uid): DID dari verifikator.proofTypes(string[]): Membatasi jenis bukti tertentu.proofPurpose(string): Validasi tujuan bukti (misalnya, "otentikasi").now(Tanggal): Waktu khusus saat ini untuk validasi.tolerance(angka): Toleransi jam dalam milidetik.udiDocument(IUidDocument[]): Skema yang diperlukan untuk validasi.didResolver(fungsi | UidDocument[]): DID penyelesai atau cache.credentialStatusLoader(fungsi): Loader untuk status kredensial.
Pengembalian:
object: Hasil verifikasi (termasuk validitas dan kesalahan).
Contoh:
const verificationResult = await Verification.verifyPresentation(vp, {
challenge: "random-challenge",
now: new Date(),
});
console.log("Verification Result:", verificationResult);
Contoh Lengkap
import {
Verification,
Credential,
AccountService,
DidService,
fromProperties,
UidDocumentSchema,
} from "@idchain-sdk";
async function createAndVerifyPresentation() {
// Siapkan akun, DID, dan kredensial (langkah serupa seperti di Layanan Kredensial)
const { mnemonic: attesterMnemonic, account: attester } =
await AccountService.generateAccount();
const { mnemonic: userMnemonic, account: user } =
await AccountService.generateAccount();
const attesterDid = await DidService.createDidAttester(
attester,
{
authentication: { publicKey: attester.publicKey, type: "ed25519" },
keyAgreement: { publicKey: attester.publicKey, type: "x25519" },
assertionMethod: { publicKey: attester.publicKey, type: "ed25519" },
capabilityDelegation: { publicKey: attester.publicKey, type: "ed25519" },
},
async ({ data }) => ({
keyType: "ed25519",
signature: attester.sign(data),
})
);
const userDid = await DidService.createDidClaimer(
user,
{
authentication: { publicKey: user.publicKey, type: "ed25519" },
},
async ({ data }) => ({
keyType: "ed25519",
signature: user.sign(data),
})
);
// Membuat skema dan kredensial
const schema = fromProperties(
"KTP Schema",
{
NIK: { type: "string" },
Nama: { type: "string" },
TTL: { type: "string" },
status: { type: "string" },
},
"V1"
);
await UidDocumentSchema.storeSchema(attester, attesterDid.uri, schema);
const unsignedVc = await Credential.requestAttestation(
userDid.document.uri,
schema,
{
NIK: "1122334455",
Nama: "Charlie",
TTL: "1990-12-01",
status: "Married",
},
attesterDid.uri
);
const vc = await Credential.issueAttestation(
unsignedVc,
attesterDid,
attester
);
// Buat Presentasi yang Dapat Diverifikasi dengan pengungkapan selektif
const vp = await Verification.setPresentation(
vc,
{ uidDocument: userDid.document, signers: [user] },
new Date(Date.now() + 5 * 60 * 1000),
{
includeClaims: ["/NIK"], // Only reveal NIK
challenge: "audit-challenge-123",
}
);
// Verifikasi presentasi
const verification = await Verification.verifyPresentation(vp, {
challenge: "audit-challenge-123",
now: new Date(),
});
console.log("Verification Result:", verification);
}
Penanganan Kesalahan
- Challenge tidak valid: Verifikasi presentasi gagal jika tantangan tidak cocok.
- VP atau VC yang kedaluwarsa: Mengembalikan kesalahan validasi jika batasan waktu gagal.
- Bukti tidak valid: Setiap gangguan pada data atau bukti akan membatalkan verifikasi.
- Skema tidak cocok: Jika cTypes atau udiDocument diperlukan dan tidak cocok, verifikasi gagal.
Modul Terkait
- Layanan Kredensial: Menerbitkan dan mencabut kredensial.
- Layanan Skema Dokumen UID: Tentukan struktur kredensial.