Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Research and implement decryption share verification for simple tDec #42

Closed
Tracked by #31
piotr-roslaniec opened this issue Jan 20, 2023 · 2 comments · Fixed by #46
Closed
Tracked by #31

Research and implement decryption share verification for simple tDec #42

piotr-roslaniec opened this issue Jan 20, 2023 · 2 comments · Fixed by #46

Comments

@piotr-roslaniec
Copy link

piotr-roslaniec commented Jan 20, 2023

  • Originally mentioned in Ensure presence and correctness of validity checks #31 and backlogged.
  • In plain words: "Prove or verify between decryption share, commitment and something public associated to the node's private share"
  • Needed to figure out which Ursulas is responsible after final decryption fails
  • Dependency of tpke security, isn't covered by verify_full from ferveo
@cygnusv
Copy link
Member

cygnusv commented Jan 20, 2023

Private info (server side)

  • Blinding key $dk_i$, a random scalar Fr, ("validator's private key")
  • Aggregated share $Z_i$, where $Z_i = dk_i^{-1} Y_i$, (tpke::private_key_share)

Public information

  • Blinding public key $ek_i$, where $ek_i = dk_i H$
  • Blinded aggregated share $Y_i$, where $Y_i = y_i\ ek_i = y_i\ dk_i H$, (note that $Y_i$ is an aggregate from multiple PVSS)

Request

  • Requester has ciphertext commitment $U$ and sends it to servers
  • Each server returns two values:
    • Decryption share $D_i = e(U, Z_i)$
    • Checksum value $C_i = dk_i^{-1} U$
  • Requester uses $D_i$ values to combine
    • If the combination is successful, congratulations.
    • Otherwise, check 2 equations:
      • $D_i == e(C_i, Y_i)$
      • $e(C_i, ek_i) == e(U, H)$
      • If both equations don't hold, server $i$ returned an incorrect decryption share or checksum value.

Request - Light subvariant

  • Requester has ciphertext commitment $U$ and a scalar $\lambda$, and sends it to servers
  • Each server returns two values:
    • Decryption share $D_i = e(\lambda \cdot U, Z_i)$
    • Checksum value $C_i = dk_i^{-1} U$
  • Requester uses $D_i$ values to combine
    • If the combination is successful, congratulations.
    • Otherwise, check 2 equations:
      • $D_i == e(\lambda \cdot C_i , Y_i)$
      • $e(C_i, ek_i) == e(U, H)$
      • If both equations don't hold, server $i$ returned an incorrect decryption share or checksum value.

@cygnusv
Copy link
Member

cygnusv commented Apr 25, 2023

For pessimistic case see issue #36

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Completed
Development

Successfully merging a pull request may close this issue.

2 participants