-
Notifications
You must be signed in to change notification settings - Fork 162
Add partially blind RSA implementation #445
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
Conversation
See the specification for more information: https://datatracker.ietf.org/doc/html/draft-amjad-cfrg-partially-blind-rsa-00
This breaks the old API. In particular, it will break this online example. Do we need to break it? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did one pass, will do another one once the suggested changes are addressed.
I suppose not, but I don't think we need to worry about API stability for a library like this. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm ok with refactoring the code (and breaking API) if it improves the code. So, here is my suggestion.
The package blindrsa
already indicates it is a blind signature of RSA type. So we can remove some prefixes.
BRSASigner -> Signer
BRSAVerifier -> Verifier
BRSAVerifierState -> VerifierState
Make the following types unexported since there exist New<> functions for them:
DeterminsiticBRSAVerifier -> determinsiticBRSAVerifier
RandomBRSAVerifier -> randomBRSAVerifier
BigPrivateKey -> bigPrivateKey
BigPublicKey -> bigPublicKey
Coalesce NewBRSAVerifier
and NewDeterministicBRSAVerifier
in a single function NewVerifier(pk,hash,flag) Verifier
with a boolean flag to choose whether is randomized or deterministic.
For Partially-blind RSA, my suggestion is to create a subpackage:
/circl/blindsign/blindrsa # blind RSA
/circl/blindsign/blindrsa/partialblindrsa # partial blind RSA
/circl/blindsign/blindrsa/internal/ # common code
This ease the naming to have plain Signer, Verifier, etc. names.
Thanks @armfazh -- I enacted all your suggestions except for the one to merge constructors. I think it's better to avoid constructors with boolean flags. For the other comments regarding key generation and whatnot, we could implement that in this change or separately. Do you have a preference? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
adding some comments to blindrsa, still need to review partialblind
Co-authored-by: Armando Faz <[email protected]>
Co-authored-by: Armando Faz <[email protected]>
Co-authored-by: Armando Faz <[email protected]>
blindsign/blindrsa/common.go
Outdated
} | ||
|
||
// VerifyMessageSignature verifies the input message signature against the expected public key | ||
func VerifyMessageSignature(message, signature []byte, saltLength int, pk *keys.BigPublicKey, hash crypto.Hash) error { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there are some exported functions that require keys from /internal/keys
package, which is an internal package.
Thus, these keys cannot be instantiated in other packages (unless providing a generator function).
Can we reconsider to unexport, for example, VerifyMessageSignature
, since we already have two constructors to get a Verifier?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we reconsider to unexport, for example, VerifyMessageSignature, since we already have two constructors to get a Verifier?
I'm not sure I follow this. Can you rephrase?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Currently there are three methods to verify a signature:
- building a
NewVerifier
, and calling itsVerify
method. - building a
NewDeterministicVerifier
, and calling itsVerify
method. - using the
VerifyMessageSignature
function.
I see redundancy on having so many functions that do the same thing (unless they behave differently).
It seems to me that 3) should not be exposed and moved to an internal package.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Got it -- thanks for clarifying. VerifyMessageSignature
is what's called internally for the Verify
function of both NewVerifier
and NewDeterminsiticVerifier.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
few minor changes only, otherwise lgtm
Co-authored-by: Armando Faz <[email protected]>
Co-authored-by: Armando Faz <[email protected]>
Co-authored-by: Armando Faz <[email protected]>
Co-authored-by: Armando Faz <[email protected]>
Co-authored-by: Armando Faz <[email protected]>
@armfazh thanks again for the suggestions -- I applied them. |
Co-authored-by: Armando Faz <[email protected]>
Refactoring to hide internals.
Thanks for the changes @armfazh! |
…834) [](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [github.com/cloudflare/circl](https://togithub.com/cloudflare/circl) | `v1.3.3` -> `v1.3.7` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | ### GitHub Vulnerability Alerts #### [GHSA-9763-4f94-gfch](https://togithub.com/cloudflare/circl/security/advisories/GHSA-9763-4f94-gfch) ### Impact On some platforms, when an attacker can time decapsulation of Kyber on forged cipher texts, they could possibly learn (parts of) the secret key. Does not apply to ephemeral usage, such as when used in the regular way in TLS. ### Patches Patched in 1.3.7. ### References - [kyberslash.cr.yp.to](https://kyberslash.cr.yp.to/) --- ### Release Notes <details> <summary>cloudflare/circl (github.com/cloudflare/circl)</summary> ### [`v1.3.7`](https://togithub.com/cloudflare/circl/releases/tag/v1.3.7): CIRCL v1.3.7 [Compare Source](https://togithub.com/cloudflare/circl/compare/v1.3.6...v1.3.7) #### CIRCL v1.3.7 ##### What's Changed - build(deps): bump golang.org/x/crypto from 0.3.1-0.20221117191849-2c476679df9a to 0.17.0 by [@​dependabot](https://togithub.com/dependabot) in [https://github.com/cloudflare/circl/pull/467](https://togithub.com/cloudflare/circl/pull/467) - kyber: remove division by q in ciphertext compression by [@​bwesterb](https://togithub.com/bwesterb) in [https://github.com/cloudflare/circl/pull/468](https://togithub.com/cloudflare/circl/pull/468) - Releasing CIRCL v1.3.7 by [@​armfazh](https://togithub.com/armfazh) in [https://github.com/cloudflare/circl/pull/469](https://togithub.com/cloudflare/circl/pull/469) ##### New Contributors - [@​dependabot](https://togithub.com/dependabot) made their first contribution in [https://github.com/cloudflare/circl/pull/467](https://togithub.com/cloudflare/circl/pull/467) **Full Changelog**: cloudflare/circl@v1.3.6...v1.3.7 ### [`v1.3.6`](https://togithub.com/cloudflare/circl/releases/tag/v1.3.6): CIRCL v1.3.6 [Compare Source](https://togithub.com/cloudflare/circl/compare/v1.3.5...v1.3.6) #### CIRCL v1.3.6 ##### What's Changed - internal: add TurboShake{128,256} by [@​bwesterb](https://togithub.com/bwesterb) in [https://github.com/cloudflare/circl/pull/430](https://togithub.com/cloudflare/circl/pull/430) - Kangaroo12 draft -10 by [@​bwesterb](https://togithub.com/bwesterb) in [https://github.com/cloudflare/circl/pull/431](https://togithub.com/cloudflare/circl/pull/431) - Add K12 as XOF by [@​bwesterb](https://togithub.com/bwesterb) in [https://github.com/cloudflare/circl/pull/437](https://togithub.com/cloudflare/circl/pull/437) - xof/k12: Fix a typo in the package documentation by [@​cjpatton](https://togithub.com/cjpatton) in [https://github.com/cloudflare/circl/pull/438](https://togithub.com/cloudflare/circl/pull/438) - Set CIRCL version for generated assembler code. by [@​armfazh](https://togithub.com/armfazh) in [https://github.com/cloudflare/circl/pull/440](https://togithub.com/cloudflare/circl/pull/440) - Add tkn20 benchmarks by [@​tanyav2](https://togithub.com/tanyav2) in [https://github.com/cloudflare/circl/pull/442](https://togithub.com/cloudflare/circl/pull/442) - Add partially blind RSA implementation by [@​chris-wood](https://togithub.com/chris-wood) in [https://github.com/cloudflare/circl/pull/445](https://togithub.com/cloudflare/circl/pull/445) - Update doc.go by [@​nadimkobeissi](https://togithub.com/nadimkobeissi) in [https://github.com/cloudflare/circl/pull/447](https://togithub.com/cloudflare/circl/pull/447) - tss/rsa: key generation for threshold RSA (safe primes) by [@​armfazh](https://togithub.com/armfazh) in [https://github.com/cloudflare/circl/pull/450](https://togithub.com/cloudflare/circl/pull/450) - Bumping Go version for CI jobs. by [@​armfazh](https://togithub.com/armfazh) in [https://github.com/cloudflare/circl/pull/457](https://togithub.com/cloudflare/circl/pull/457) - Spelling by [@​jsoref](https://togithub.com/jsoref) in [https://github.com/cloudflare/circl/pull/456](https://togithub.com/cloudflare/circl/pull/456) - blindrsa: updating blindrsa to be compliant with RFC9474 by [@​armfazh](https://togithub.com/armfazh) in [https://github.com/cloudflare/circl/pull/464](https://togithub.com/cloudflare/circl/pull/464) - Releasing CIRCL v1.3.6 by [@​armfazh](https://togithub.com/armfazh) in [https://github.com/cloudflare/circl/pull/465](https://togithub.com/cloudflare/circl/pull/465) ##### New Contributors - [@​nadimkobeissi](https://togithub.com/nadimkobeissi) made their first contribution in [https://github.com/cloudflare/circl/pull/447](https://togithub.com/cloudflare/circl/pull/447) - [@​jsoref](https://togithub.com/jsoref) made their first contribution in [https://github.com/cloudflare/circl/pull/456](https://togithub.com/cloudflare/circl/pull/456) **Full Changelog**: cloudflare/circl@v1.3.3...v1.3.6 ### [`v1.3.5`](https://togithub.com/cloudflare/circl/compare/v1.3.4...v1.3.5) [Compare Source](https://togithub.com/cloudflare/circl/compare/v1.3.4...v1.3.5) ### [`v1.3.4`](https://togithub.com/cloudflare/circl/compare/v1.3.3...v1.3.4) [Compare Source](https://togithub.com/cloudflare/circl/compare/v1.3.3...v1.3.4) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/hetznercloud/terraform-provider-hcloud). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjcuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEyNy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
See the specification for more information. This is needed to help experiment with a version of Privacy Pass that supports public metadata, described here.
This change removes some of the interfaces that were previously unused, like the generic
blindsign.Verifier
andBlindSign.Signer
interfaces.cc @Guss123