From c4f6c244695f0c4b3ca279705aff7265e9a3dabc Mon Sep 17 00:00:00 2001 From: jude Date: Mon, 13 Feb 2023 14:36:58 +0000 Subject: [PATCH] Fix bug in random generator. Correct a proof --- static/js/paillier.js | 3 ++- static/js/random_primes.js | 4 ++-- whitepaper/Dissertation.pdf | Bin 282695 -> 282517 bytes whitepaper/Dissertation.tex | 6 ++---- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/static/js/paillier.js b/static/js/paillier.js index 3635df6..7d0de5f 100644 --- a/static/js/paillier.js +++ b/static/js/paillier.js @@ -3,13 +3,14 @@ let p, q, pubKey, privKey; class PubKey { constructor(p, q) { this.n = p * q; - this.g = this.n + 1n; + // this.g = this.n + 1n; } encrypt(m) { // Compute g^m r^n mod n^2 let r = random2048(); + // Resample to avoid modulo bias. while (r >= this.n) { r = random2048(); } diff --git a/static/js/random_primes.js b/static/js/random_primes.js index 76f1f54..7abf1bc 100644 --- a/static/js/random_primes.js +++ b/static/js/random_primes.js @@ -21,8 +21,8 @@ function generate_bigint() { // Drop the MSB to force into range from above intRepr >>= 1n; - // Add 2^127 to force into range from below - intRepr += 2n ** 127n; + // Add 2^2047 to force into range from below + intRepr += 2n ** 2047n; return intRepr; } diff --git a/whitepaper/Dissertation.pdf b/whitepaper/Dissertation.pdf index f8f6c8dccd4cd338c79f1b8de410a5f37b180e77..71ce28cac4d1113afc0aca80310ebc7acd7f6079 100644 GIT binary patch delta 23101 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 UIGr{Kj3Xe*kHf;EsHKGSKcoNJCIA2c delta 23262 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 VVefSTKwME#0bEvA6 q$. Suppose $\gcd(pq, (p - 1)(q - 1)) \neq 1$. Then, $q - 1 \mid p$. However, the bit-lengths of $p, q$ are identical. So $\lfloor \frac{1}{2}p \rfloor < q$. This is a contradiction to $q - 1 \mid p$, and so $\gcd(pq, (p - 1)(q - 1)) = 1$ as required. + WLOG, assume $p > q$. Suppose $\gcd(pq, (p - 1)(q - 1)) \neq 1$. Then, $q \mid p - 1$. However, the bit-lengths of $p, q$ are identical. So $\frac{1}{2}(p - 1) < q$. This is a contradiction to $q \mid p - 1$ (as 2 is the smallest possible divisor), and so we must have $\gcd(pq, (p - 1)(q - 1)) = 1$ as required. \end{proof} As the prime generation routine generates primes of equal length, this property is therefore guaranteed. The next optimisation is to select $g = 1 + n$.