Choosing p , q to rectify mod
problems :
We encrypt by calculating
message X (mod pq). In practice, we are
forced to break X into a series of
smaller packets, and encrypt these packets individually. Otherwise X could be an arbitrarily large integer, which becomes difficult to
deal with. Our current version uses
base-10 numbers, and we are forced to fix the size of the packet to some number
of digits. We chose 8 for our packet
size. This means that our packets can
only represent numbers from 0 to . Therefore, we would
like to choose pq to be as close to
this number as possible. If
200,000,000, we would encrypt just fine. However, on decryption, we could obtain a
packet with value more than 99,999,999.
In fact, these “overflowed packets” would become very common, if we
assume each packet value to be equally likely.
A full one half of all of the packets we receive would fail to be correctly
decrypted. This would lead to a 50% packet loss and an incomprehensible
message. By carefully choosing p and q, we can eliminate almost all of the packet loss and maintain a
better exchange of packets. For
example, take pq = (10061)(9941) = 100,016,401.
This allows only 16,402 packets in 100,000,000 to be mistranslated,
which is 0.016402% packet loss, a great improvement. This is why we have chosen these primes as our default values in
the program.
If we were to manipulate
packets in binary, our pq must be
near a power of two, which is much simpler to find. Primes of the form and
are well known. Naturally, a product of primes of these
forms together would be reasonably close to a power of two. The problem with choosing primes in this
manner is that, given a public key, finding such formulaic primes to break the
encryption would be much simpler than finding other primes.