On Wednesday 31 October 2007 14:19, Andy wrote: ... > All I have to do to prove this false
False != lies. It can simply be wrong. There's many possible reasons there. > , is to demonstrate that 1 Open > Source DRM solution exists. > You must therefore disprove that all the following exist: > http://www.sidespace.com/products/medias/ > https://dream.dev.java.net/ > http://sourceforge.net/projects/openipmp You say the word "solution" here. A solution is only a solution if it solves a problem. If it solves a problem that problem can be defined as requirements. We then get into "petty" details of whether the phrase "no open source DRM" is the one or "no open source DRM solution", or whether it means "no open source DRM that can be trusted because if one did exist attacking it would be easy because the source is there, which means it would either have to be classed as weak DRM, broken DRM or not DRM". We also get into who gets to set requirements etc. (petty is used here as tongue in cheek :) ) Afterall ROT13 could be viewed is a simple DRM mechanism. It's also open source. Is it even valid? Yes, if you don't *know* I'm doing ROT13. However, we could chase our own tails as has happened month after month on this list :-). So I've spent my evening doing something more productive which hopefully you'll find interesting, and any (constructive) comments you have would be welcome. OK, here goes.... OK, why the reply? I said I'd step out the conversation earlier. Well, figured I'd spend some of my own time looking at the options you've put forward to look at the following: * Can it really protect the keys from the user/person who wants to watch the content. (required to protect the content) (The trusted parties (by the content producer) need to be the distribution system and the decode/display equipment. The user is the untrusted party. This is of course extremely different from the usecases where encryption is normally used. * Can it really protect the playback chain? (If you can _easily_ intercept after decode it's not useful) (nb in both cases protect means "to a reasonable extent preventing relatively obvious attacks") * Sheer codebase size. One thing that almost all code metrics show is that bugs are related to lines of code, almost irrespective of language. In a security system bugs == attack vectors. As a result a security system that is small enough (but no smaller) is likely to have a lower number of attack vectors, generally speaking. * Able to adhere to the rights model hard fought for. (Remember the biggest achievement[*] of iPlayer is to change the public discussion from whether the BBC should even be allowed to provide *any* form of download service into a big argument regarding how much more it should be providing. After all there was huge political opposition to a download service. The rights agreed were as far as I can tell very hard fought...) [*] In my personal opinion only * An obvious evaluation criterion is whether it supports (or could be made to support) appropriate audio/video codecs, and potentially also interactive content, subtitling and so on. (Since, yes, there are rights associated even with subtitles...) * Have some form of support mechanism in existence. * Adaptability and potential to be embedded easily into other systems of various kinds. (Obviously has bonus points if there's an existing demo) I'm using the view "how easy would this be to integrate into Kamaelia without an obvious attack vector" as being my metric for the last bullet point. Also, since I'm doing this on my own time, please don't flame me -- I'd far rather be spending more time on Kamaelia related stuff :-) I'm not likely to slavishly follow this list, but its what I'm looking at. I know you were simply looking to debunk the phrase "No open source DRM", but its worth seeing if the options you put forward are viable and if so why/why not. I don't expect to do all of them tonight :-) OK, let's start with this one, since it was the most accessible. > http://www.sidespace.com/products/medias/ A cursory looking at this DRM solution suggests it doesn't support this: (from the iPlayer pages) "This means that most programmes are licensed to be kept in your Library for up to 30 days. When you first playback a downloaded programme, it will expire and be deleted from your Library within a set number of days. This is usually up to seven days depending on its licence " (The license vault appears to store licenses with permissions, however expiry times/dates are absolutes not relative. It's nice though that the license file can set different sorts of rights expirations.) Being an open source system, this could be worked around. However it has a clear attack vector: "4. License Vault, a DBM file that stores and manages user licenses. Its contents are manipulated by the Media-S client library." ... "LICENSE VAULT OVERVIEW Working hand-in-hand with the Media-S decoding mechanism (such as the oggs123 player) is the license vault. The license vault is a local encrypted database that stores content provider and license information for each file. This DBM file itself is not encrypted, " Which makes it easily accessible. (It also has the potential for file corruption I note) "however by default each of the key values is encrypted using 1024-bit 3DES encryption using a key generated from specific user and machine information. The use of machine-specific information ties a specific license vault to a particular user on a particular machine, and it is this encryption that provides the tethering aspect of Media-S." However, it's also this that probably makes this removeable. (esp given access to source makes figuring out how to do this alot simpler. After all, you want to attack the key storage, something very difficult for an attacker in something like ssh because they don't have access to the machine, but a lot simpler if you own the machine. Looking at the code, decrypting these encrypted keys should be pretty simple, since the tether id (which the above text refers to) is generated (if you're not on windows) as follows: int getTetherID(char **cTetherID) { int ret = 0; int s = socket(AF_INET, SOCK_DGRAM, 0); struct ifreq req; int err, nRet; char cTemp[100]; if (*cTetherID) free(*cTetherID); strcpy(req.ifr_name, "eth0"); err = ioctl(s, SIOCGIFHWADDR, &req); if (err == -1) { //just use user id if no eth0 snprintf(cTemp, 100, "%d", getuid()); *cTetherID = strdup(cTemp); return 0; } snprintf (cTemp, 100,"%02x:%02x:%02x:%02x:%02x:%02x", req.ifr_hwaddr.sa_data[0], req.ifr_hwaddr.sa_data[1], req.ifr_hwaddr.sa_data[2], req.ifr_hwaddr.sa_data[3], req.ifr_hwaddr.sa_data[4], req.ifr_hwaddr.sa_data[5]); *cTetherID = strdup(cTemp); close(s); return ret; } (we are allowed to discuss code on backstage? ;-) :-) </tongue-in-cheek> ) Aside from anything else, this means that most Mac users would be have the tetherid. (the first ethernet device is not eth0 on a Mac, and many Macs have one user - and hence the same uid). Similarly Solaris boxes would also have issues. The other interesting issue here is that changing your network card would lock you out of the content you've paid for. Even under linux the labels eth1 & eth0 can be reassigned, and some modern distros *do* do this. *NOTE* _Because_ this is open source I've been able to examine it to find out the appropriate way to attack the DRM mechanism. With customisation however and a license to close this, the concept of a tether id is potentially useful, so this cuts both ways. (bad in that it made it attackable, good in that it opens up a line of thinking) Being tied to a single data format (a relatively impractical one at that), not supporting the rights model needed, a fairly obvious attack vector, having been in beta for 4 years with no updates in CVS over the same time period are all problems. Furthermore an analysis of the system at the time said this: "Both Media-S and OpenIPMP require lots of further development before their functionalities become of interest for mass deployment," - http://www.drmwatch.com/drmtech/article.php/3094761 (April 2003) >From a support perspective, there is none. But from a code size perspective, Media-S wins hands down: ~/Incoming> du -sh openipmp2/ dream/dream/DReaM/ Media-S/medias-1-0-beta-2 354M openipmp2/ 13M dream/dream/DReaM/ 580K Media-S/medias-1-0-beta-2 Is that too small though ? Based on the missing functionality across the board (rights model, media/format support, key protection, ability to move between machines/cope with NIC changes) I suspect it is. It gets bonus points though for adaptability. It's clear thought has gone into the fact that this needs to tie in with other systems, and being a relatively clear & straightforward set of C files is quite refreshing. Unfortunately it seems problematic to build. (Even though I regularly build lots of things with this machine) OK, so summarising this based on the things I mentioned I'd look at: * Can it really protect the keys from the user/person who wants to watch the content? NO. In my view they're not the least bit safe. They may as well be stored in the clear. (I haven't looked at how the vendor key plays a part here though, so that may need review.) * Can it really protect the playback chain? No, I don't think so based on the basic look tonight. I could be wrong there. It *could* be extended to do so though. The small codebase size would help here. * Sheer codebase size. This is pretty manageable. The codebase is pretty small. It's also pretty clear. * Able to adhere to the rights model. No, the library would need to be extended to deal with this. How it deals with relative time is completely undefined here. This is however potentially an opportunity. * An obvious evaluation criterion is whether it supports (or could be made to support) appropriate audio/video codecs Only supports ogg vorbis, though with work (perhaps significant) could be made to do so. At present I'd guess its just too niche there. * Have some form of support mechanism in existence. The codebase hasn't been touched in 4 years. As a project goes, its stone cold dead. (mind you, open source software don't die, they just starting resting & pining for the fjords) * Adaptability and potential to be embedded easily into other systems of various kinds. I think due to sheer size and clarity of code this is actually relatively realistic. If a better mechanism was found to protect the license vault, this could be a nice stating point. It could probably be embdeded in Kamaelia for example with effort. (like most pure C libraries can) Being GPL rather than LGPL or BSD is a pain though. Though they will sell you a license to be able to close the code. (which may be necessary to add an extra layer of protection onto the keys) Overall, its a nice try, but in no way matches the criterion I'd personally set, though there is a core there. I'll look at DReaM or openipmp tomorrow evening hopefully. (the former is a "look again" - I looked at it last when it was in early spec stages) (and no, I can't do the same for windows media DRM. I'm not privvy to the details, and I'd probably have to sign NDA to get them :) Apologies if that's all a little random - and also, improvements on this summary (and on criterion) welcome. :-) Regards, Michael. -- (NB I'm doing this in my own time to see whether the options you put forward seem reasonable so it's entirely personal - DRM isn't my day work, and incidentally this is typed on a Linux box, which means yes, I can't use iPlayer either :-) Also, there are people who DO have this as their day work, and I believe are looking at options. ALSO important to note:: __NONE__ of this is a BBC opinion) - Sent via the backstage.bbc.co.uk discussion group. To unsubscribe, please visit http://backstage.bbc.co.uk/archives/2005/01/mailing_list.html. Unofficial list archive: http://www.mail-archive.com/[email protected]/

