Application Identity

There’s this fantasy that applications will someday be able to identify themselves. That is, they will be able to act as a “principal”, just like you or me. This doesn't make sense.

 

In reality, applications are agents; agents of a real user. That is, applications (aka. code) acts because a user told it to. If this was not universally true, then someone has figured out true AI (artificial intelligence) and the landscape of computer systems as we know it is forever changed. I’ve been watching the 5 O’clock news. There haven’t been any major breakthroughs in AI lately. Until that day, software is simply an agent of a user, period.

 

Some people think that if only you could identify the app, then you cold hold the app-writer accountable and therefore hold harmless the user who unwittingly invoked the app.

 

But wait a second, how dumb could a crook be to let you know who he is? Let’s say he writes this awesome worm that completely messes with everything in your system. Is he going to sign the app as “Crook”? Is he going to place a return address on his app? “Here, I’m at 1111 Stupid Lane, come and get me!” Absolutely not! Hackers have always focused on those vulnerabilities which leave no trace back to them. That’s just common sense.

 

Let’s say you’re a good company, conscientious in every way. What’s the first thing you’re going to place on your license agreement? I’m no lawyer, but I expect it will read something like “XXX corporation is not responsible for any damages the user might encounter while using this software…” etc. etc. etc.

 

Now back to application IDs. I’m not saying that signing software isn’t a good idea. On the contrary! More and more applications are being delivered online. Signing the application manifest including a digest of all binaries is just common sense. But remember the disclaimer. The signatures are just there to enable you to 1) make an informed decision about whether the package you got came from who you thought it did and 2) that any attempt to modify the application in transit can and will be detected. You can also use the manifest to ensure that the application remains unchanged over time.

 

What I object to is the notion that an application can act on its own. I object to the notion that an app can authenticate to a remote party. This makes no sense. On the other hand, if the user (eg. person) wants to cough up the manifest associated with the application he’s running, that’s certainly his prerogative. In fact, a relying party may require this. However, the trust, the liability, the responsibility is on the user to ensure that A) his system is functioning within parameters, B) the application he’s running is the one he wants and C) the actions taken on his behalf by the application are ultimately his responsibility.

 

Won’t this mean that users will be held accountable for stuff they have no control over? No. They can always choose not to run a piece of software, not to use a computer, or to use a different operating system. In fact, because software runs under the context of the user and the user most likely has the potential to do whatever it wants with the software, this actually creates a completely new problem. What’s to prevent a malicious user from intentionally modifying the software in such a way as to damage the reputation of the software publisher, or even to hold the software publisher accountable for actions taken with that software?

 

In short, applications are not principals. They do not act on their own. Software publishers are not responsible for the actions taken by a user. Users must always be held accountable for the actions they take, no matter the agent. Let’s make operating systems and software that enable users to make informed decisions about which agents to invoke, and allow them to control the rights and privileges afforded to the agent. This makes sense.


Posted Dec 13 2005, 08:36 PM by doug-walter

Comments

Henk de Koning wrote re: Application Identity
on 12-14-2005 2:31 PM
Although I agree with you for the most part, I think you over simplified the story.

What if user actions are deferred in time. Is the program still assuming the identity of the user ? I guess so .. But what if there's more then one user ? Take an Interpay batch. That processes payments issued by thousands of people. Is it a thousand identities ? Or is its identity the bank ? Or the guy at the bank who started it ..

And what about computers. Are they identities ? They seem to think so, nowadays. But what distinguishes the program called operating system from a user application ?

In short, I think you're right. Kind of. But only for interactive on-line apps ;-).
Doug Walter wrote re: Application Identity
on 12-15-2005 12:53 PM
Thanks for the comments. You bring up some very good points.

I agree this is somewhat of an over-simplification.

I still hold true that software always acts on behalf of a user.

Users must be held liable for actions taken on their behalf. The burden is on the user to proove that he or she acted in good faith. I believe we need to enable users to identify faults in applications, and hold application wrtiers accountable for their negligence. This is the same in my mind as something so mundane as a car. That is, if a driver gets in an accident, it is up to the driver to prove he acted appropriately. If the driver believes that the car (aka. agent or tool) was to blame, the driver must provide evidence to support that. If the car is found to be faulty, then the burden is still on the driver to prove that the manufacturer of the car was guilty of negligence. In all these exchanges, the driver assumes liability until responsibility can be placed elsewhere.

I believe all assets, whether real or ephemeral, have an identity. In fact, anything you can identify (that is which have measurable characteristics that can uniquely distinguish the entity from others) has an identity. All software, therefore, has an identity. In fact, packages of software, also have an identity which can be established by creating a manifest of the composition of the package.

As to actions deferred in time. Imagine if we had robots which followed complex instructions from users. If the robot ended up doing something wrong, who's the first person to get blamed? Until we have systems which think for themselves, the blame of course will go to the programmer/user. Even if things happen while you're not around, if you were the instigator, then you're responsible.

As for batch jobs, I believe it's the organization that runs the service that is responsible. Take for example, if the batch processing agent, the exact same code, deployment, configuration, etc. was run by two organizations. Let's say one was run by a government recognized corporation that had been in business for several decades. The other, run by a couple of unknowns out of their basement. Remember, it's the same code. If I had the choice, of course I'd go with the more well-known company, especially if it's my finances at stake. Software itself does not define responsibility.

I know the question you posed was somewhat different. Since a batch agent is doing work on behalf of a thousand users. Which one is the agent operating under. Ultimately, it's whoever takes the fall if something goes wrong. Presumably, the agent is under contract with each of the users for which the batch agent is doing work. The items which are the agent's organization's responsibility under contract are the things under which the organization's identity should be used. Those things which are the user's responsibility are the users. In your specific example, the agent is responsible for faithfully executing transactions based on the parameters of the contracts with each user. If the transaction involves illegal transfer of funds, presumably there is some obligation on the agent itself to report to the government any activity which seems suspicious, as well the user is responsible for initiating the action. In none of these transactions is the software responsible or liable. The fact that the agent's organization has entrusted its functions to a computer, in no way relieves it of its obligations to the user under contract, or to the government(s) in whose jurisdiction these transactions are taking place.

I believe the notion of software as a principal is flawed. This applies even to the operating system and the hardware it runs on.

But then, that's just my opinion... :)

-Doug
James wrote re: Application Identity
on 12-19-2005 4:26 PM
Security is increased when certificates are treated as GUIDs. We need to move past the model of charging for security as this will always result in insecurity...

http://duckdown.blogspot.com/

Add a Comment

(required)  
(optional)
(required)  
Remember Me?