[Cryptech Tech] Roadmap & remarks about the opportunity of developing a secure TOR router on the Novena platform.

Bernd Paysan bernd at net2o.de
Sun Aug 3 22:44:34 UTC 2014


Am Sonntag, 3. August 2014, 09:42:12 schrieb Benedikt Stockebrand:
> I've taken a look at D some time ago, but it got rather quiet about it.
> Maybe some time I'll find the time to give Go a chance, but I'm not sure
> when, and if at all.

It fixes at least the worst offenders in C.  I'd say, if you are looking for a 
traditionally compiled language without much extensibility (i.e. no DSLs), and 
without an interactive shell to try things out, Go is a pretty reasonable 
language with a C-like syntax.  For me, no interactivity, and no big 
extensibility is a show-stopper.

As the biggest problem with security is feature bloat, it certainly isn't slim 
enough, though.

> The weaknesses with TCP/IP and especially SSL aren't all implementation
> related anyway, but design problems.  They all suffer from significant
> feature bloat, APIs that are a pain in the backside to use as is, and
> implementations that weren't necessarily built with the level of
> security awareness they would have deserved by our today's standards.
> 
> Or put more bluntly: You may be trying to fix a minor hole with lots of
> enthusiasm but completely ignore the much larger holes elsewhere.  This
> is good to get started, but it won't win you any much until you
> eventually address all the issues involved.

I've some other issues with pushing down security relevant issues to hardware 
description languages (Verilog or VHDL): There is the law of constant 
complexity: If you have such an issue, the complexity is not changing, when 
you move it through the layers of your stack.  However, the actual effort is 
changing, it is considerably higher the lower you get (the effort to manage 
the same amount of complexity).  If I have a compiler that needs to check 
boundaries of array accesses, I have to insert some comparisons - that's all.  
If I do that on a lower level, I have to think about segment descriptors, and 
compare accesses through these segments with their limits; find a way to keep 
the segment descriptors and limits inside some registers, and so on.

Intel solved that with a pretty complex microcode which they apparently don't 
dare to change since the 286/386 days.  Solving that in a HDL is even more 
complex.  I won't say it's not doable, and if you do that right, it may not be 
very complicated.  But the idea that moving things down the abstraction layer 
makes them easier to write correct is IMHO foolish.

If you design for doable-in-hardware, you have to take ten times the effort in 
making it simpler.  Then it's trivial to get it right in software, and doable 
in hardware.  The security gain from hardware are then

* speed (you can use all the parallelism there is)
* more difficult to modify (an attacker can't just load software to change 
your network stack, he has to replace your hardware)

-- 
Bernd Paysan
"If you want it done right, you have to do it yourself"
http://bernd-paysan.de/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.cryptech.is/archives/tech/attachments/20140804/74e95992/attachment.sig>


More information about the Tech mailing list