Yes, I noticed that, I&#39;m using 2048 in production, and I&#39;ll start using urandom too. But that&#39;s not my problem, currently I&#39;m focusing on other things, so I&#39;ll just wait, meanwhile if someone find anything, it&#39;s all good, otherwise when I need I&#39;ll ask for that other RSA implementation.<br>

<br><div class="gmail_quote">On Tue, Feb 10, 2009 at 10:32 PM, Dwayne C. Litzenberger <span dir="ltr">&lt;<a href="mailto:dlitz@dlitz.net" target="_blank">dlitz@dlitz.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

On Mon, Feb 09, 2009 at 10:36:40AM -0200, Mauricio Arozi wrote:<br>
&gt;Am I helpless?<br>
<br>
I think the problem is that you&#39;re asking the mailing list for the *Python*<br>
Cryptography Toolkit about how to use an obscure *PHP* library.<br>
<br>
We can help with the Python side of things. &nbsp;I wouldn&#39;t expect the people<br>
here to know and/or care much about PHP.<br>
<div><br>
&gt; According to this site: <a href="http://pajhome.org.uk/crypt/rsa/rsa.html" target="_blank">http://pajhome.org.uk/crypt/rsa/rsa.html</a>, and<br>
&gt; yet others, the e(exponent?) is used for the public key, and d for the<br>
&gt; private key.<br>
<br>
</div>The notation I&#39;ve seen most often is something like this:<br>
<br>
 &nbsp; &nbsp; n - modulus (public)<br>
 &nbsp; &nbsp; e - public exponent<br>
 &nbsp; &nbsp; d - private exponent<br>
 &nbsp; &nbsp; (n, e) - public key<br>
 &nbsp; &nbsp; (n, d) - private key<br>
 &nbsp; &nbsp; (p, q) - the (private) primes from which the keypair is derived.<br>
<br>
PyCrypto uses a similar notation:<br>
<div><br>
 &nbsp; &nbsp; from Crypto.PublicKey import RSA<br>
</div> &nbsp; &nbsp; import os<br>
<br>
 &nbsp; &nbsp; # DO NOT USE RandomPool (see below)<br>
 &nbsp; &nbsp; keypair = RSA.generate(2048, os.urandom)<br>
<br>
 &nbsp; &nbsp; print &quot;PRIVATE KEYPAIR:&quot;<br>
 &nbsp; &nbsp; print &quot;n:&quot;, keypair.n &nbsp; # modulus (public)<br>
 &nbsp; &nbsp; print &quot;e:&quot;, keypair.e &nbsp; # public exponent<br>
 &nbsp; &nbsp; print &quot;d:&quot;, keypair.d &nbsp; # private exponent<br>
 &nbsp; &nbsp; print &quot;p:&quot;, keypair.p &nbsp; # prime (private)<br>
 &nbsp; &nbsp; print &quot;q:&quot;, keypair.q &nbsp; # other prime (private)<br>
 &nbsp; &nbsp; print &quot;u:&quot;, keypair.u &nbsp; # I forget what this for (but it&#39;s private)<br>
<br>
 &nbsp; &nbsp; pub = keypair.publickey()<br>
 &nbsp; &nbsp; print &quot;&quot;<br>
 &nbsp; &nbsp; print &quot;PUBLIC KEY:&quot;<br>
 &nbsp; &nbsp; print &quot;n (pub):&quot;, pub.n &nbsp; &nbsp; # modulus (public)<br>
 &nbsp; &nbsp; print &quot;e (pub):&quot;, pub.e &nbsp; &nbsp; # public exponent<br>
 &nbsp; &nbsp; print &quot;d (pub):&quot;, pub.d &nbsp; &nbsp; # raises an exception<br>
 &nbsp; &nbsp; print &quot;p (pub):&quot;, pub.p &nbsp; &nbsp; # raises an exception<br>
 &nbsp; &nbsp; print &quot;q (pub):&quot;, pub.q &nbsp; &nbsp; # raises an exception<br>
 &nbsp; &nbsp; print &quot;u (pub):&quot;, pub.u &nbsp; &nbsp; # raises an exception<br>
<br>
This outputs the following:<br>
<br>
 &nbsp; &nbsp; PRIVATE KEYPAIR:<br>
 &nbsp; &nbsp; n: 277...[truncated]<br>
 &nbsp; &nbsp; e: 65537<br>
 &nbsp; &nbsp; d: 232...[truncated]<br>
 &nbsp; &nbsp; p: 159...[truncated]<br>
 &nbsp; &nbsp; q: 174...[truncated]<br>
 &nbsp; &nbsp; u: 125...[truncated]<br>
<br>
 &nbsp; &nbsp; PUBLIC KEY:<br>
 &nbsp; &nbsp; n (pub): 277...[truncated]<br>
 &nbsp; &nbsp; e (pub): 65537<br>
 &nbsp; &nbsp; d (pub):<br>
 &nbsp; &nbsp; Traceback (most recent call last):<br>
 &nbsp; &nbsp; &nbsp; File &quot;x.py&quot;, line 21, in ?<br>
 &nbsp; &nbsp; &nbsp; &nbsp; print &quot;d (pub):&quot;, pub.d<br>
 &nbsp; &nbsp; &nbsp; File &quot;/usr/lib/python2.4/site-packages/Crypto/PublicKey/RSA.py&quot;, line 154, in __getattr__<br>
 &nbsp; &nbsp; &nbsp; &nbsp; return getattr(self.key, attr)<br>
 &nbsp; &nbsp; AttributeError: rsaKey instance has no attribute &#39;d&#39;<br>
<div><br>
&gt; My problem is that while using PyCrypto to generate both public and<br>
&gt; private keys, the e(exponent?) is always the same.<br>
<br>
</div>Mads Kiilerich already talked a bit about this, but I won&#39;t go into detail.<br>
What you&#39;re describing here is normal, and it really helps improve the<br>
performance of encryption/verification.<br>
<br>
If you&#39;re concerned about the security of using RSA, I suggest reading Dan<br>
Boneh&#39;s 1999 article, &quot;Twenty years of attacks on the RSA cryptosystem&quot;:<br>
<br>
 &nbsp; &nbsp; <a href="http://crypto.stanford.edu/%7Edabo/abstracts/RSAattack-survey.html" target="_blank">http://crypto.stanford.edu/~dabo/abstracts/RSAattack-survey.html</a><br>
<div><br>
&gt;So in simple words, I only need to be able to encrypt/decrypt sign and<br>
&gt;verify signs on php and python, simultaneously, if possible, using RSA<br>
&gt;algo.<br>
<br>
</div>PyCrypto&#39;s PublicKey package is very low-level, so people shouldn&#39;t use it<br>
directly unless they REALLY know what they are doing. &nbsp;Mere mortals should<br>
use a separate library in addition to PyCrypto for that. &nbsp;You should never<br>
do anything like this:<br>
<div><br>
&gt;privkeyA = RSA.generate(512, rpool.get_bytes)<br>
&gt;pubkeyA = privkeyA.publickey()<br>
&gt;<br>
&gt;msg = &#39;This is the secret phrase testing.&#39;<br>
&gt;msgc = pubkeyA.encrypt(msg, &#39;&#39;)<br>
<br>
</div>That is called &quot;textbook RSA&quot;, and it&#39;s insecure. &nbsp;(Also, it uses a 512-bit<br>
key, which is way too short, but I assume that&#39;s just for demonstration.)<br>
I strongly recommend looking at PKCS#1v2 (also known as RSAES-OAEP).<br>
PyCrypto doesn&#39;t include an implementation yet, but Sergey Chernov<br>
mentioned that he is working on one.<br>
<br>
Also, I noticed in your code that you used RandomPool. &nbsp;Don&#39;t. &nbsp;RandomPool<br>
is a security disaster, and it will be removed from future versions. &nbsp;See<br>
the following messages:<br>
<br>
 &nbsp; &nbsp; <a href="http://lists.dlitz.net/pipermail/pycrypto/2008q3/000000.html" target="_blank">http://lists.dlitz.net/pipermail/pycrypto/2008q3/000000.html</a><br>
 &nbsp; &nbsp; <a href="http://lists.dlitz.net/pipermail/pycrypto/2008q3/000020.html" target="_blank">http://lists.dlitz.net/pipermail/pycrypto/2008q3/000020.html</a><br>
<br>
I hope you find the above information helpful.<br>
<br>
Cheers,<br>
 &nbsp;- Dwayne<br>
<font color="#888888"><br>
--<br>
Dwayne C. Litzenberger &lt;<a href="mailto:dlitz@dlitz.net" target="_blank">dlitz@dlitz.net</a>&gt;<br>
 &nbsp;Key-signing key &nbsp; - 19E1 1FE8 B3CF F273 ED17 &nbsp;4A24 928C EC13 39C2 5CF7<br>
 &nbsp;Annual key (2008) - 4B2A FD82 FC7D 9E38 38D9 &nbsp;179F 1C11 B877 E780 4B45<br>
</font><div><div></div><div>_______________________________________________<br>
pycrypto mailing list<br>
<a href="mailto:pycrypto@lists.dlitz.net" target="_blank">pycrypto@lists.dlitz.net</a><br>
<a href="http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto" target="_blank">http://lists.dlitz.net/cgi-bin/mailman/listinfo/pycrypto</a><br>
</div></div></blockquote></div><br>