- From: Christian Geuer-Pollmann <geuer-pollmann@nue.et-inf.uni-siegen.de>
- Date: Thu, 09 May 2002 23:50:29 +0200
- To: reagle@w3.org, merlin <merlin@baltimore.ie>, John Boyer <JBoyer@PureEdge.com>
- cc: w3c-ietf-xmldsig@w3.org
- Message-ID: <50129302.1020988228@crypto>
--On Dienstag, 7. Mai 2002 12:24 -1000 Joseph Reagle <reagle@w3.org> wrote: > On Monday 06 May 2002 21:01, Christian Geuer-Pollmann wrote: >> PS: Actually, I don't know why [2] is not considered by anybody be worth >> to have a closer look at. > > I think it is worth consideration, and we want to think about > functionality and performance. Merlin mentioned he didn't feel the > functionality that compelling but I'd like to here from others. Since in > another email you mentioned your hoping to respond to John's request for > performance results, perhaps you could share numbers on this point too! OK, here they are: Hi all, today, I did some performance testing on xmldsig-xfilter2 and on my own approach for filtering. For these tests, I used the sample file which John supplied (the pureedge data) and the illustrated sample from the xmldsig-xfilter2 filter spec. To have a rough idea on the comparison to other signatures, I also created a detached signature for a 300kB GIF image. To get a little bit more accurate data, I created each signature 600 times. To eliminate the influence of public key crypto, all these "signatures" are HMAC-SHA1's. The test machine is a Pentium3, 733MHz, 256MB RAM, Windows 2000, SUN Java JRE 1.3.1. ##################################### Test description: ##################################### simple_gif_detached: A detached signature over a 300 kilo bytes binary file (no transforms). The file (should) come from the operating systems and hard drives cache (600 reads on the same file...). ##################################### pureedge_xfilter2: This is an enveloped signature which is embedded into the "LeaveRequest.xfd" file. It uses the transform: <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2002/04/xmldsig-filter2"> <dsig-xpath:XPath xmlns:dsig-xpath="http://www.w3.org/2002/04/xmldsig-filter2" Filter="subtract"> /XFDL/page[@sid='PAGE1']/*[@sid='CHECK16' or @sid='CHECK17' or @sid='FIELD47' or @sid='BUTTON2' or @sid='FIELD48'] | /XFDL/page/triggeritem[not(attribute::sid) | /XFDL/page/*/triggeritem] | here()/ancestor::ds:Signature[1]</dsig-xpath:XPath> </ds:Transform> </ds:Transforms> ##################################### pureedge_apachefilter This is an enveloped signature which is embedded into the "LeaveRequest.xfd" file. The transform results in the same result as pureedge_xfilter2 does. It uses the proprietary transform: <ds:Transforms> <ds:Transform Algorithm="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter "> <xx:XPathAlternative xmlns:xx="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter"> <xx:IncludeButSearch> / </xx:IncludeButSearch> <xx:Exclude> /XFDL/page[@sid='PAGE1']/*[@sid='CHECK16' or @sid='CHECK17' or @sid='FIELD47' or @sid='BUTTON2' or @sid='FIELD48'] | /XFDL/page/triggeritem[not(attribute::sid) | /XFDL/page/*/triggeritem] | here()/ancestor::ds:Signature[1]</xx:Exclude> </xx:XPathAlternative> </ds:Transform> </ds:Transforms> ##################################### xfilter2spec_xfilter2_3 and xfilter2spec_apachefilter_3 are both applied to the sample from section 4 in <http://www.w3.org/Signature/Drafts/xmldsig-xfilter2/>. The ..xfilter2_3 uses the three <ds:Transform>s from the example, the ..apachefilter_3 results in the same nodeset using the following transform: <ds:Transforms> <ds:Transform Algorithm="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter "> <xx:XPathAlternative xmlns:xx="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter"> <xx:IncludeButSearch> //ToBeSigned | //ReallyToBeSigned </xx:IncludeButSearch> <xx:ExcludeButSearch> / | //NotToBeSigned </xx:ExcludeButSearch> <xx:Exclude> here()/ancestor::ds:Signature[1] </xx:Exclude> </xx:XPathAlternative> </ds:Transform> </ds:Transforms> ##################################### Timing Results: Number of iterations: 600 simple_gif_detached 294,503 seconds (0,49 second per iteration) ---------------------------------------------------------------------------- pureedge_xfilter2 1.144,620 seconds (1,91 second per iteration) pureedge_apachefilter 1.205,240 seconds (2,00 second per iteration) ---------------------------------------------------------------------------- xfilter2spec_xfilter2_3 138,910 seconds (0,23 second per iteration) xfilter2spec_apachefilter_3 131,178 seconds (0,22 second per iteration) What you can see here is that my approach is 5% slower than the current spec for the pureedge example and 5% faster for the example from the spec. My guess is the following: It's not possible with xmldsig-xfilter2 to do the operations from subsequent transforms in a single step; each transform MUST be handled individualy, so each transform costs time. If you do multiple xmldsig-xfilter2 operations for selecting the right nodes, this becomes more and more inefficient. 'My' transform does the complete selection in a single step. These is no need to do multiple union/intersect/subtract ops in a sequence to select the right things. So I guess that the runtime of my transform is -- well, not constant, but -- depending on the form of the selected subtrees. ##################################### To test this, I took the (very small) example from section 4 and created three different signatures using both transform algos: xfilter2spec_xfilter2_1 only does this: - intersect(//ToBeSigned) xfilter2spec_xfilter2_2 does this: - intersect(//ToBeSigned) - subtract(//NotToBeSigned) xfilter2spec_xfilter2_3 was the full magic (mentioned earlier): - intersect(//ToBeSigned) - subtract(//NotToBeSigned) - union(//ReallyToBeSigned) ################################# xfilter2spec_apachefilter_1, xfilter2spec_apachefilter_2 and xfilter2spec_apachefilter_3 produce the same results using my transform: ################################# xfilter2spec_apachefilter_1: <ds:Transform Algorithm="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter "> <xx:XPathAlternative xmlns:xx="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter"> <xx:IncludeButSearch> //ToBeSigned </xx:IncludeButSearch> <xx:ExcludeButSearch> / </xx:ExcludeButSearch> <xx:Exclude> here()/ancestor::ds:Signature[1] </xx:Exclude> </xx:XPathAlternative> </ds:Transform> ################################# xfilter2spec_apachefilter_2 <ds:Transform Algorithm="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter "> <xx:XPathAlternative xmlns:xx="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter"> <xx:IncludeButSearch> //ToBeSigned </xx:IncludeButSearch> <xx:ExcludeButSearch> / | //NotToBeSigned </xx:ExcludeButSearch> <xx:Exclude> here()/ancestor::ds:Signature[1] </xx:Exclude> </xx:XPathAlternative> </ds:Transform> ################################# xfilter2spec_apachefilter_3 <ds:Transform Algorithm="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter "> <xx:XPathAlternative xmlns:xx="http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/#xpathFilter"> <xx:IncludeButSearch> //ToBeSigned | //ReallyToBeSigned </xx:IncludeButSearch> <xx:ExcludeButSearch> / | //NotToBeSigned </xx:ExcludeButSearch> <xx:Exclude> here()/ancestor::ds:Signature[1] </xx:Exclude> </xx:XPathAlternative> </ds:Transform> ################################# When you look at the results below, you see that each step in the xfilter2spec_xfilter2_(1/2/3) adds more processing time, while this is not the case for 'my' transform: I can't tell why they are as they are. xfilter2spec_xfilter2_1 109,337 seconds (0,18 second per iteration) xfilter2spec_xfilter2_2 122,206 seconds (0,20 second per iteration) xfilter2spec_xfilter2_3 138,910 seconds (0,23 second per iteration) ---------------------------------------------------------------------------- xfilter2spec_apachefilter_1 130,297 seconds (0,22 second per iteration) xfilter2spec_apachefilter_2 123,268 seconds (0,21 second per iteration) xfilter2spec_apachefilter_3 131,178 seconds (0,22 second per iteration) ################################# To show you what I did, I attach a ZIP containing all signatures (doc) and the de-references and transfomed octets (ref). (I did not include the GIF, it's simply 318 KB (326.587 Bytes).
Attachments
- application/x-zip-compressed attachment: geuerp-xmldsig-bench.zip
Received on Thursday, 9 May 2002 17:46:07 UTC