Gavin Bong wrote:
> I'm interested in the signature field in AndroidManifest. Is that
> signature meant to represent a digital signature of app ?

As the documentation states:

"Temporary package attribute assigning a signature to the package. This 
will be removed once real support for package signing is implemented. "

So, I wouldn't count on that specific attribute being around.

> Assuming that's the case; I forsee that I will need to:-
> 
> a) embed the public key of the author of the app in my server.apk
> b) verify the digsig during the first call. Subsequent calls will not
> need re-verification.
> 
> Is this doable ?

I am not Bruce Schneier, nor do I play him on TV. I don't claim to be a 
security expert. That being said...

Unless you are passing around some sort of request token, I don't know 
how you will be able to identify "subsequent calls" as being from the 
same caller as a previous one. And, if you *are* passing some sort of 
caller token with each call, impersonation is merely a matter of 
intercepting and reusing said token. Even if you check the digital 
signature on each call, assuming the signature is of some packaging of 
the call's parameters, you are still subject to a replay attack. Now, 
replay attacks probably require hacking into Android's internals, which 
will take some effort on the part of the attacker.

A determined person will break it anyway, if they can get their hands on 
your client APK. I suspect Dalvik bytecodes can be decompiled, even if 
there isn't necessarily a decompiler available at present. Then, it's 
just a matter of figuring out where your private key is stored. If the 
client application can sign things, somebody with the APK can, in 
theory, learn everything that is needed to sign things as well.

So the question you need to ask yourself is: will the amount of security 
gained from going through this be worth the effort?

Note that this isn't an Android issue per se. You would encounter 
similar problems confirming that a client executable is "authorized" in 
any sort of client-server or IPC/RPC mechanism. It's not to say that 
it's impossible, but it's not likely to be very easy if you want 
assurances of absolute security. If "probably secure" is good enough, 
your digital signature mechanism may well work.

Just my two cents' worth on the topic...

-- 
Mark Murphy (a Commons Guy)
http://commonsware.com
_The Busy Coder's Guide to Android Development_ -- Available Now!

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
Announcing the new M5 SDK!
http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to