He brought it there just to share the WTF moments. PCSoft never ceases to amaze us. A very bad language and an even worse marketing strategy, but the company still works...
643 karma · joined May 17, 2010
Read my braindumps at http://unhandledexpression.com Follow my rants at http://twitter.com/gcouprie
He brought it there just to share the WTF moments. PCSoft never ceases to amaze us. A very bad language and an even worse marketing strategy, but the company still works...
I usually have no temper problem, but everytime someones proposes a new secure system and ignores the holes people point out, because that means I will need to spend months explaining to pepople that they should not use it, even if it is "hype".
So, yes, again, you are right, my apologies.
It will never get the entire list anyway...
IIRC there were patent issues for some curves, but is that the only reason?
The real problem here: cryptanalysis advances like Joux's tend to create big leaps, much bigger than what we predict based on Moore's law.
And there's the problem that RSA 2048 is slow, and RSA 4096 is so slow that it's impractical...
But the OTR protocol can be effectively adapted to email. It would need a few emails to establish the original key exchange, but that's not too hard to do. In fact, TextSecure, an Android app (soon on iOS) already does OTR like that for SMS.
The real problem with a system like this is deciding how you would authenticate the person with whom you're communicating. Pre shared key? PGP-signed message?
Writing a "ping-pong"? And not using the same client to test both servers?
It would not have been too hard to write a simple proxy in both languages. Not even worrying about parsing HTTP headers, just testing TCP, that is really easy.
Now, if you really want to test the performance, you have to implement it differently. Just two small features you would need in both:
* non blocking IO: right now, you're starting a new future in Scala, that's easy to write but not really efficient (it might work better with goroutines) * zero copy: if you're load balancing, you will spend your time moving bits, so you'd better make sure that you don't copy them too much. It is possible with Scala, but it looks like Go does not support it
Now, when you have reasonable testing grounds (that woudn't be more that a hundred lines in both languages), better get your statistics right.
"The client would make 100 concurrent connections and send a total of 1 million pings to the server, evenly distributed over the connections. We measured the average round trip time" -> that is NOT how you should test. Here, you would want to know what is the nominal pressure the balancer could handle, so you must measure a lot of metrics:
* RTT * bandwidth (per user and total) * time to warmup (the JVM optimizes a lot of things on the fly, you have to wait for it) * operational limits (what is the maximal bandwidth for which the performance crashes? same for number of users)
And then, you don't measure only the average values. You must measure the standard deviation. Because you could have a good average, but wildly varying data, and that is not good.
Last thing: the macbook may not be a good testing system.
For anonymization systems, care must be taken: being able to manipulate encrypted data could very well create information leaks.
There have been some interesting theoretical uses of the Pallier cryptosystem in private information retrieval systems, though.
If you need to rely on encryption to protect your privacy, then you have very little privacy, because everything that is not encrypted can be snooped on: where you are, who you talk to and about what (because GPG doesn't protect the username and subject), who are your friends (because you can't trust them to encrypt properly).
If you want to escape surveillance, encryption is just one tool. What you really need is good opsec habits. See for examples http://fr.slideshare.net/grugq/opsec-for-hackers
I have found that e-book writing is a nice way to get a product out of consulting engagement:
1- get a mission on an exotic platform or technology
2- read a lot about the subject, write your own documentation, format it nicely
3- you can sell it, but there's an even better side effect: you're now the guy who has written a book on the subject, which will get you more engagements...
How will your system cope with the augmentation of transactions? I see you use a consensus based system like Bitcoin, and these tend to take more and more time to converge when the number of transactions gets bigger.
The real problem with end to end security and things like email is that you cannot automate it without a central authority. You will still need to exchange keys at one time, and making that secure is hard.
If you are ready to make compromises, you could set up email clients so that they always send their public key in a header somewhere (or a pointer to their public key). You would not be sure on the first exchange that it is really the person you are talking to, but you would get the assurance that future messages come from the same person.
Beside the tongue-in-cheek comment, payment systems are already decentralized. You can send money to anyone just by knowing their IBAN number, independently of the bank you're affiliated to.
* everything is done server side -> trust issues
* no encryption, just indexed by a hash -> that means the messages are not store encrypted on the server
I would recommend people stay away from your solution, and instead use something like Zerobin: http://sebsauvage.net/paste/ It encrypts everything using SJCL, and if I am worried with the server sending me a modified version of the JS code, I can still keep the code on my own computer but use it to send to the server.
* UI design is a lot easier on iOS if you use XCode's interactive designer. Doing it on Android with Eclipse's designer is painful, but I expect that Android Studio will make that easier.
* UI design without the interactive designer is easier on Android, because iOS is quite verbose for this
* About the code, I have found that iOS's APIs are badly designed, and change too often. The API's of Android are much more stable, but they can require too much code sometimes (example: setting onclick listeners for elements).
* About the tests, it is a lot easier to test for every iOS device, because there are so few (and iOS versions are rapidly deprecated). Android devices have a lot of different OS versions, screen resolutions, CPU, etc. That makes it tougher to test exhaustively.
Nevertheless, I have found that Android development is a lot easier than iOS development (at least for me), simply because XCode spends its time fighting me. For Android, I can just bypass Eclipse and work directly in vim with a Makefile, or I can develop in Scala and use SBT. It's much more fun that way :)
And to answer the last question: apps are primarily developed for iOS because:
* it is believed that iOS users are more likely to pay for an app
* journalists are often more on iOS than Android (and you want to please them)
* CEOs are often more on iOS than Android
There are about 180000 words in English (but don't assume everybody knows 180000 words). That means that for three words, you have at most 5.810^15 options.
For a password with mixed case and numbers, you have 62 different characters. With, 9 characters, you have 1.310^16 options.
I can understand that people would prefer common words to remember them, but they are not that much stronger.
The best password is the password I don't need to remember: generate long random passwords, and store them in your browser, in Keepass, LastPass or whatever system of your choice.