Hi Gregg,

Are you happy to donate the code from your http://pastion.dev.java.net project and upload it to JIRA?

JERI is quite pluggable, so I'm confident we can integrate it without getting tied to particular platforms and your code donation would be very appreciated!

It's both interesting and understandable that both yourself and Dennis are wary of remote code security, so I'll concede defeat on this occasion, I consider you both more experienced than I, that also means that if either of you feel the inclination, I invite you to please consider becoming Committers with Apache River.

However as a separate interest, I'm looking into what can be done about dynamically downloaded code and trust.

Currently when you install Apache River locally, you go to the Apache web site, download the release, it's signed using pgp and you can use asynchronous public key cryptography to confirm the file checksum. I suppose a good DNS spoofing attack could destroy trust, if you didn't have a copy of my public key locally.

To me, cryptography is just as important to dynamically downloaded code. Today md5 is considered weak, httpmd may no longer be considered trustworthy and is in need of a suitable replacement.

I'm working on a Concurrent replacement for DyanamicPolicyProvider, we have the ability to dynamically grant permissions to a particular ClassLoader with a set of Principals, OR a set of principals, OR a ClassLoader. This is based around proxy trust.

I'm currently working on a new mechanism for storing permission grants and considerably expanding the flexibility of dynamic permission grants, to more faithfully replicate those of policy file permission grants and then some.

So I'm working on allowing dynamic grants (and revoke) by:

ProtectionDomain (only exists at runtime, multiple may exist per ClassLoader) CodeSource (again multiple may exist per ClassLoader, in addition it can exist in multple ClassLoaders, many to many relationship)
Certificate[] - Certs used to sign code.

These are in addition to Principal[] and ClassLoader.

The underlying theory, is to allow permission by divide and conquer of trust concerns.

What can we do with the additional flexibility?

Well, for one, we'll be able to grant permissions based on the certificates of the developers we trust, this will allow for peer review of several companies or individuals that cooperate based on some common code, after it has undergone peer review, we might also want to combine this requirement with a particular set of Principals, who are allowed to execute that code. Then this code will be considered safe for dynamic download, update (developer trust, integrity) and execution (developer and user trust must be satisfied).

You might want to revoke permissions based on a vulnerability discovered in a particular CodeSource, without revoking certificates, principals etc. Or if a group of certificates have become compromised, revoke permissions specific to those.

I'd like to set up a Codebase where users can contribute their Service Interfaces, Apache River can distribute these on their behalf, after peer review. I'd like to create a runtime ClassLoader for Service Interfaces, high up in the ClassLoader hierarchy so proxy's and clients can cooperate using them. By allowing ProtectionDomain based Principal[] permission grants, we can load codebase-less dumb proxy's with the Service Interface ClassLoader, this solves problems with ClassLoader visibility for non hierarchical ClassLoader relationships in some environments, such as OSGi, although developers might want more specific control of ClassLoader visibility, so don't take this as final.

Another benefit of ProtectionDomain based grants, a Service's smart proxy might utilise a trusted piece of code, it might provide access to a protected system resource. This trusted piece of code can reside in the same ClassLoader with the proxy, visible only to the proxy and within it's own ProtectionDomain to perform some function on behalf of the proxy, without allowing whatever the secure concern might be, to escape via the proxy, or allowing the proxy itself to be privileged. This trusted piece of code could be based on a Certificate chain and Principal[] and have its permission revoked as soon as it is no longer needed. Trust for that code might be negotiated between the two cooperating parties, or it might be posted for public peer review and signing.

Once we have this additional power and flexibility, then we can build infrastructure on top.

I believe we can create a new web environment in which people, equipment and computers can cooperate based on models of trust, encryption and dynamic code, utilising Apache River's Jini Services implementation. Or we can die trying.

Come all ye developers, join in the fun, lets work together and get our River flowing.

Peter.






Reply via email to