<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Hi Chris,<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Yeah I kind of remember that.&nbsp; The concern was that there was some pieces of cryptography that were not necessary if someone, for example,e just wanted a hash or ssl or something of that sort.&nbsp; Not sure that the current state of packages is all that bad.&nbsp; Suggestions?<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Ron<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> squeak-dev-bounces@lists.squeakfoundation.org [mailto:squeak-dev-bounces@lists.squeakfoundation.org] <b>On Behalf Of </b>Chris Muller<br><b>Sent:</b> Saturday, November 23, 2013 2:28 PM<br><b>To:</b> Ron Teitelbaum<br><b>Cc:</b> Cryptography Team Development List; The general-purpose Squeak developers list<br><b>Subject:</b> Re: [Cryptography Team] RE: [squeak-dev] Crypto support?<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>I don't know. &nbsp;The state of Cryptography never really recovered from when the team went through a kind of self-destruct sequence. &nbsp;Do you remember? &nbsp;At first we had just one package, &quot;Cryptography&quot; and we were advancing. &nbsp;Then there was this big push from a few members in the team to &quot;packagify&quot; it into a bunch of tiny little packages (I don't remember why).<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Unfortunately the dependencies didn't match the semantic boundaries and we had endless discussions about what class should belong in what package, renaming packages to accomodate their different scope, etc.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Meanwhile, &quot;customers&quot; of Cryptography were having trouble understanding the latest &quot;state&quot; of it and also loading it of course, until, after several months, the team back-tracked and went back to the single package, even though there was still some disagreement, I think, and the &quot;team&quot; sort of fizzled out.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>I don't remember it too clearly -- It's all in the archives.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>The end result was I sort of threw up my hands and used my own version of Cryptography. &nbsp;I would like to get back to one good, quality version, though.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div><div><p class=MsoNormal style='margin-bottom:12.0pt'><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>On Fri, Nov 22, 2013 at 9:10 PM, Ron Teitelbaum &lt;<a href="mailto:ron@usmedrec.com" target="_blank">ron@usmedrec.com</a>&gt; wrote:<o:p></o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'>Hi Chris,<br><br>I thought I remembered you doing something like that. &nbsp;Did you post that code to Cryptography or just to KryptOn? &nbsp;Didn't you do the version on Cryptography? &nbsp;Sure looks to me like the current version is using the sound system.<br><br>Thanks!<br><br>Ron<br><br>&gt; -----Original Message-----<br>&gt; From: <a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org">squeak-dev-bounces@lists.squeakfoundation.org</a> [mailto:<a href="mailto:squeak-dev-">squeak-dev-</a><br>&gt; <a href="mailto:bounces@lists.squeakfoundation.org">bounces@lists.squeakfoundation.org</a>] On Behalf Of Chris Muller<br>&gt; Sent: Friday, November 22, 2013 4:04 PM<br>&gt; To: Cryptography Team Development List<br>&gt; Cc: The general-purpose Squeak developers list<br>&gt; Subject: Re: [Cryptography Team] RE: [squeak-dev] Crypto support?<br>&gt;<br>&gt; (Whew, busy day today!)<br>&gt;<br>&gt; &gt; As for status of the Crypto team. &nbsp;Not too much going on at the moment.<br>&gt; &gt; I&#8217;m still the team leader but the group has been very quiet for some time.<br>&gt; &gt; I haven&#8217;t had time to spend on it lately. &nbsp;At some point we started<br>&gt; &gt; working on a better random generator that takes in multiple sources of<br>&gt; &gt; input; Fortuna based on Schneier&#8217;s book. &nbsp;Never got around to<br>&gt; &gt; finishing it. &nbsp;I think Chris&#8217;s Secure Random was also based on the<br>&gt; &gt; same model and he did a version of Fortuna but never did the proper<br>&gt; &gt; entropy gathering. &nbsp;It&#8217;s been a while so if I&#8217;m wrong please feel free to correct<br>&gt; me.<br>&gt;<br>&gt; Back in 2005-2006, I spent, like, 11 months working through that entire book [1]<br>&gt; and creating a package (KryptOn) that implemented the most important<br>&gt; chapters from that book as strictly as I could.<br>&gt;<br>&gt; Fortuna, of course, was one of the starting points. &nbsp;I don't know if I used<br>&gt; &quot;proper&quot; entropy gathering, but I'm satisified that it is reasonably _enough_<br>&gt; entropy for seeding Fortuna. &nbsp;Here's the method I use to generate an entropic<br>&gt; string to seed a new Fortuna random<br>&gt; generator:<br>&gt;<br>&gt; unpredictableStringsDo: aBlock<br>&gt; &nbsp; &nbsp; &nbsp;&quot;Enumerate sources of information from my environment that should be<br>&gt; generally hard to guess.&quot;<br>&gt; &nbsp; &nbsp; &nbsp;| time |<br>&gt; &nbsp; &nbsp; &nbsp;time _ Time millisecondsToRun:<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [ aBlock<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;value: World imageForm bits compressToByteArray ;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;value: Sensor mousePoint x asString ;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;value: Sensor mousePoint y asString ;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;value: Time millisecondClockValue asByteArray ;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;value: Date today asString ;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;value: Time now asString ;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;value: Display extent asString.<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 100 timesRepeat: [ aBlock value: UUID new ].<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; #(vmVersion platformName primVmPath imageName platformSubtype<br>&gt; datedVersion lastQuitLogPosition vmStatisticsReportString imageName) collect:<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[ : each |<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;aBlock value: (SmalltalkImage current perform: each) asByteArray ] ].<br>&gt; &nbsp; &nbsp; &nbsp;aBlock<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value: time asByteArray;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &quot;maybe the pointer has moved, hit it again.&quot;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value: Sensor mousePoint asString ;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value: Time millisecondClockValue asByteArray<br>&gt;<br>&gt; Good luck guessing each and every one of those correctly! &nbsp;Each time aBlock is<br>&gt; valued with one of the slightly unguessable strings, it is progressively hashed<br>&gt; after being bixXor'd against the *prior* hashed value before being appended as<br>&gt; a ByteArray to a stream of bytes, until, finally, the total ByteArray is then hashed<br>&gt; via SHA256. &nbsp;That hash value is finally used as the seed for the new Fortuna<br>&gt; instance.<br>&gt; The gory details below [2].<br>&gt;<br>&gt; There just ain't no way any hacker could/would try to guess that seed.<br>&gt; &nbsp;And I didn't even need to use Sound input. &nbsp;But, as you can see, it depends on<br>&gt; quite a few other things..<br>&gt;<br>&gt; So, it takes a long time to run (~ 500 ms) which is why the global #picker is<br>&gt; initialized just once and can be used indefinitely for that image session.<br>&gt;<br>&gt; [1] -- <a href="http://www.amazon.com/Practical-Cryptography-Niels-" target="_blank">http://www.amazon.com/Practical-Cryptography-Niels-</a><br>&gt; Ferguson/dp/0471223573/ref=sr_1_1?ie=UTF8&amp;qid=1385152889&amp;sr=8-<br>&gt; 1&amp;keywords=schneier+practical+cryptography<br>&gt;<br>&gt; [2] -- generateKey<br>&gt; &nbsp; &nbsp; &nbsp;| unguessableBytes prior |<br>&gt; &nbsp; &nbsp; &nbsp;prior _ UUID new shuffled asInteger.<br>&gt; &nbsp; &nbsp; &nbsp;unguessableBytes _ ByteArray streamContents:<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [ : stream |<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self unpredictableStringsDo:<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[ : each |<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| current |<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;current _ each size &lt; 30<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifTrue:<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;[ &quot;Some of the inputs are pretty short, expand them a little, and<br>&gt; take opportunity to inject some extra craziness.&quot;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(each asByteArray asInteger<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raisedTo: 64<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; modulo: 6773186437430423149 &nbsp; &nbsp; &quot;prime&quot;)<br>&gt; asByteArray ]<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ifFalse: [ each ].<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&quot;make each value dependent on the prior values, so the adversary is<br>&gt; required to get every single string exactly right AND guess every the<br>&gt; randomizations correctly.&quot;<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;current _ SHA1 new hashMessage: (current bitXor: prior).<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stream nextPutAll: current asByteArray.<br>&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;prior _ current ] ].<br>&gt; &nbsp; &nbsp; &nbsp;^ SHA256 new hashMessage: unguessableBytes<br>&gt;<br>&gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; There is a plugin implementation available on the croquet plugin. &nbsp;See<br>&gt; &gt; gatherEntropy: which was done by Andreas. &nbsp;It uses platform specific<br>&gt; &gt; implementations so it&#8217;s a pretty good choice.<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; We really should finish this work since any real attack on security<br>&gt; &gt; starts with bad random number generators. &nbsp;(Well actually an attack at<br>&gt; &gt; the endpoint is more likely but that&#8217;s a different email).<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; All the best,<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; Ron Teitelbaum<br>&gt; &gt;<br>&gt; &gt; Head Of Engineering<br>&gt; &gt;<br>&gt; &gt; 3d Immersive Collaboration Consulting<br>&gt; &gt;<br>&gt; &gt; <a href="mailto:ron@3dicc.com">ron@3dicc.com</a><br>&gt; &gt;<br>&gt; &gt; Follow Me On Twitter: @RonTeitelbaum<br>&gt; &gt;<br>&gt; &gt; <a href="http://www.3dicc.com" target="_blank">www.3dicc.com</a><br>&gt; &gt;<br>&gt; &gt; 3d ICC on G+<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; From: <a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org">squeak-dev-bounces@lists.squeakfoundation.org</a><br>&gt; &gt; [mailto:<a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org">squeak-dev-bounces@lists.squeakfoundation.org</a>] On Behalf Of<br>&gt; &gt; Nicolas Cellier<br>&gt; &gt; Sent: Tuesday, November 19, 2013 4:43 PM<br>&gt; &gt; To: The general-purpose Squeak developers list<br>&gt; &gt; Subject: Re: [squeak-dev] Crypto support?<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; Sure that makes sense. Historically there were no such service in the<br>&gt; &gt; System.<br>&gt; &gt; I wanted to remind that crypto has to care that randomness comes from<br>&gt; &gt; sufficiently random source, not just a random random source.<br>&gt; &gt;<br>&gt; &gt; If the contract is explicit enough (Smalltalk cryptoLevelRandom?),<br>&gt; &gt; then it can move to the System.<br>&gt; &gt;<br>&gt; &gt; But would it serve other purpose than crypto?<br>&gt; &gt;<br>&gt; &gt; I would rather implement a CryptoRandom class part of Crypto package,<br>&gt; &gt; either via plugin or FFI to wrap over /dev/random or equivalent...<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; 2013/11/19 Frank Shearar &lt;<a href="mailto:frank.shearar@gmail.com">frank.shearar@gmail.com</a>&gt;<br>&gt; &gt;<br>&gt; &gt; That's why I used the phrase &quot;better encapsulated&quot; :) I don't care<br>&gt; &gt; particularly _where_ the randomness comes from (and on a Unix machine,<br>&gt; &gt; /dev/random or /dev/urandom (I can't remember which) is the proper<br>&gt; &gt; place). I just really, really don't want a Crypto package depending on<br>&gt; &gt; a Sound package. So if System supplied a hook that declared &quot;get your<br>&gt; &gt; randomness here&quot;, and the base image _happened_ to connect that to<br>&gt; &gt; one's mic, that would be OK. But the direct dependency is bonkers.<br>&gt; &gt;<br>&gt; &gt; frank<br>&gt; &gt;<br>&gt; &gt; On 19 November 2013 21:27, Nicolas Cellier<br>&gt; &gt;<br>&gt; &gt; &lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com">nicolas.cellier.aka.nice@gmail.com</a>&gt; wrote:<br>&gt; &gt;&gt; It's because crypto must not rely on pseudo random generated numbers,<br>&gt; &gt;&gt; they are considered too easy to crack.<br>&gt; &gt;&gt; I guess that sound input was seen as a universal way to get some<br>&gt; &gt;&gt; hardware noise...<br>&gt; &gt;&gt; Nowadays, shouldn't it be something like /dev/random?<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt; 2013/11/19 Frank Shearar &lt;<a href="mailto:frank.shearar@gmail.com">frank.shearar@gmail.com</a>&gt;<br>&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt;&gt; Does anyone know the current state of play of the crypto team?<br>&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt;&gt; We have a DSA implementation in &quot;System-Digital Signatures&quot; that<br>&gt; &gt;&gt;&gt; should belong in a package called &quot;Crypto-Something&quot;, but if the<br>&gt; &gt;&gt;&gt; other stuff was better I'd rather delete this and use the proper stuff.<br>&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt;&gt; Also, we need a better encapsulated source of randomness than<br>&gt; &gt;&gt;&gt; &quot;SoundService default randomBitsFromSoundInput: 512&quot; because crypto<br>&gt; &gt;&gt;&gt; shouldn't depend on a sound package. I don't care if something<br>&gt; &gt;&gt;&gt; _plugs that in_, but the direct reference is suboptimal.<br>&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt;&gt; frank<br>&gt; &gt;&gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;&gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; _______________________________________________<br>&gt; &gt; Cryptography mailing list<br>&gt; &gt; <a href="mailto:Cryptography@lists.squeakfoundation.org">Cryptography@lists.squeakfoundation.org</a><br>&gt; &gt; <a href="http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/cryptograph" target="_blank">http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/cryptograph</a><br>&gt; &gt; y<br>&gt; &gt;<br>&gt;<br><br><o:p></o:p></p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div></div></body></html>