<?xml version="1.0"?>
<!-- RSS generated by Radio UserLand v8.0.8 on Thu, 01 Apr 2004 14:34:30 GMT -->
<rss version="2.0">
	<channel>
		<title>Brian Maso&apos;s Tecno-Geek Weblog</title>
		<link>http://www.blumenfeld-maso.com/weblog/</link>
		<description>The musings of a mild-mannered tecno-geek.</description>
		<language>en-us</language>
		<copyright>Copyright 2004 Brian Maso</copyright>
		<lastBuildDate>Thu, 01 Apr 2004 14:34:30 GMT</lastBuildDate>
		<docs>http://backend.userland.com/rss</docs>
		<generator>Radio UserLand v8.0.8</generator>
		<managingEditor>brian@blumenfeld-maso.com</managingEditor>
		<webMaster>brian@blumenfeld-maso.com</webMaster>
		<category domain="http://www.weblogs.com/rssUpdates/changes.xml">rssUpdates</category> 
		<skipHours>
			<hour>23</hour>
			<hour>0</hour>
			<hour>1</hour>
			<hour>2</hour>
			<hour>3</hour>
			<hour>4</hour>
			<hour>20</hour>
			<hour>22</hour>
			</skipHours>
		<ttl>60</ttl>
		<item>
			<title>Groovy is groovy</title>
			<link>http://www.theserverside.com/news/thread.tss?thread_id=24798</link>
			<description>JSR 241 -- the &quot;Grrovy&quot; language JSR -- has passed the JCP. I read
about it in TheServerSide.com article, pointed out by Scott Hodson in
the OCPATTERNS mailing list. I barely know anything about this
language, and its already official!&lt;br&gt;
</description>
			<guid>http://www.blumenfeld-maso.com/weblog/2004/04/01.html#a45</guid>
			<pubDate>Thu, 01 Apr 2004 14:34:29 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114191&amp;amp;p=45&amp;amp;link=http%3A%2F%2Fwww.blumenfeld-maso.com%2Fweblog%2F2004%2F04%2F01.html%23a45</comments>
			</item>
		<item>
			<title>Groovy as an &quot;official&quot; alternate language for the JVM</title>
			<link>http://www.jcp.org/en/jsr/detail?id=241</link>
			<description>&lt;a href=&quot;http://www.jcp.org/en/jsr/detail?id=241&quot;&gt;JSR 241&lt;/a&gt; attempts to officially designate &lt;a href=&quot;http://groovy.codehaus.org/&quot;&gt;Groovy&lt;/a&gt;
as an alternative language for the Java VM. The Groovy language is an
&quot;agile&quot; language, meaning the language designers attempted to design
something a programmer could use to rapidly develop code. Not a bad
idea, really, for quick &apos;n dirty code development. &lt;a href=&quot;http://www.ruby-lang.org/en/&quot;&gt;Ruby&lt;/a&gt;, &lt;a href=&quot;http://www.jython.org/&quot;&gt;Jython&lt;/a&gt;
and others have been around for a while. Making an official RAD
language would stop the balkanization of agile language alternativesfor
the JVM. It would also make use of agile languages a realistic
alternative for those (great number of) programming houses who are more
conservative and like to stick to &quot;official&quot; stuff.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
</description>
			<guid>http://www.blumenfeld-maso.com/weblog/2004/03/16.html#a44</guid>
			<pubDate>Tue, 16 Mar 2004 21:24:08 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114191&amp;amp;p=44&amp;amp;link=http%3A%2F%2Fwww.blumenfeld-maso.com%2Fweblog%2F2004%2F03%2F16.html%23a44</comments>
			</item>
		<item>
			<title>Credential Management</title>
			<link>http://www.blumenfeld-maso.com/weblog/2003/10/08.html#a43</link>
			<description>&lt;P&gt;Sharing a few thoughts on security credential management that occurred to me this week...&lt;/P&gt;
&lt;P&gt;This issue is credential security: When a credential is presented to a system for authentication, how &quot;assurred&quot; is the system that the credential has not been compromised? That the entity presenting the credential is actually an agent of the identity assocaited with the credential?&lt;/P&gt;
&lt;P&gt;To assess &quot;assurrance&quot;, you must first consider the type of credential. Token credentials, such as HTTP Session cookies or SAML tokens, are the simplest tyep of credential. The token has been assocaited with an identity known to the system. The simplicity of this credential, however, means that the credential is easy to steal and re-use. Any time the credential is used it can be copied and immediately used by an attacker - use of the credential opens it to compromise relatively easily.&lt;/P&gt;
&lt;P&gt;Username/password is really just another version of a token, from the receiving system&apos;s point of view. It is a chunk of data that has been associated with a user identity. But use of the username/password immediately opens it up to attack. Anyone who can &quot;see&quot; the username/password pair&amp;nbsp; can immediately use it to make false requests.&lt;/P&gt;
&lt;P&gt;The very first time it is used a token credential provides a high degree of assurance. However, each time it is used thereafter its assurrance is &quot;degraded&quot; because of the repeated exposure. Each time it is used it may be copied by an attacker, and so every time after the first there is a cumulative risk that the token has been compromised.&lt;/P&gt;
&lt;P&gt;Good management of token-type credentials must therefore include limiting the &quot;lifetime&quot; of the credential. That is, if each time it is used there is some cumulative degredation of &quot;assurance&quot;, then assurance approaches 0 as utility approaches infinity. So yhou must limit the uses of the token-type credential to prevent a statistically certain compromise, which would happen eventually.&lt;/P&gt;
&lt;P&gt;There are 2 techniques commonly used to limit the utility of a credential:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Lifetime&lt;/LI&gt;
&lt;LI&gt;Max usage count&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The &quot;lifetime&quot; technique places a maximum absolute duration on the lifetime of the credential. The credential is considered no longer usable after this lifetime duration has run out. Assuming there are only a finit number of times the credential can be used within a finite time duration, then this technique adequately protects against statisticaly compromise; set the lifetime duration based on the risk each cumulative use adds to compromize, multiplied by the max number of time the credential may be used during its lifetime.&lt;/P&gt;
&lt;P&gt;The max usage count technique cuts right to the point: the real crux of the problem is that each time the credential is used, it is potentially compromized. So just limit the total number of times it may be used. This should allow you to manage the risk of compromize.&lt;/P&gt;
&lt;P&gt;Another important feature of credential management is revocation. Once a system detects that a credential has been compromised, or is likely to have been compromised, then the system must be able to revoke the credential. Otherwise an attacker may continue to use a compromized credential with impunity, even though the system administrators may even know that the credential has been stolen.&lt;/P&gt;
&lt;P&gt;Now note that more complicated credentials, such as hash values built from tokens as well as PK certificates, really have all the same problems are simple tokens. Each exposure means an attacker may copy the credential. Once an attacker has a copy, with correctly applied technique it is only a matter of time before the credential is compromised: hash algorithms can be reversed to obtain the original token; PK private keys can be derived from PK public keys with enough brute-force calculation.&lt;/P&gt;
&lt;P&gt;So use of the alternative techniques really only reduce the culumative risk of compromise associated with each exposure of these alternative credentials. The risk is not reduced to zero, but it is reduced exponentially, by potentially thousands of orders of magnitude. However, the need still remains for minimizing utility, and for revocation.&lt;/P&gt;
&lt;P&gt;When designing identity credential management, analysis must include what type of credential is being used, with a special eye towards how much risk of compromise is added whenever the credential is used. Lifetime or usage count techniques, as well as a revocation mechanism, must be employed to provide a minimum level of identity assurance to the system.&lt;/P&gt;</description>
			<guid>http://www.blumenfeld-maso.com/weblog/2003/10/08.html#a43</guid>
			<pubDate>Wed, 08 Oct 2003 21:53:04 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114191&amp;amp;p=43&amp;amp;link=http%3A%2F%2Fwww.blumenfeld-maso.com%2Fweblog%2F2003%2F10%2F08.html%23a43</comments>
			</item>
		<item>
			<title>Distributing a Web Service Sample Implementation</title>
			<link>http://www.blumenfeld-maso.com/weblog/2003/09/15.html#a42</link>
			<description>&lt;P&gt;&lt;EM&gt;Brian: incomplete. Will hook up links and flesh out a bit soon...&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;I developed a trick for distributing a &lt;EM&gt;test&lt;/EM&gt;&amp;nbsp;web service&amp;nbsp;implementation. A test implementation would be used by someone else externally to develop a Web Service client. Its an implementation that runs locally on the external developer&apos;s machine serving up &quot;dummy&quot; data, but using the correct WSDL and message validity just like a production version of the web service.&lt;/P&gt;
&lt;P&gt;Using a test implementation means my company doesn&apos;t have to host and maintain a test implementation on public web servers. Its really amazing how resistant&amp;nbsp;IT departments are towards making implementations available externally, and this solution avoid dealing with those people at all.&lt;/P&gt;
&lt;P&gt;The idea is that a test implementation of the web service is &quot;pushed&quot; to a client machine through JNLP (Java Web Start). The test implementation is downloaded and runs locally on the client machine when the user clicks particular web page link -- if you are at all familiar with Java Web Start then ou know what I&apos;m talking about. The test implementation is downloaded and run on the client&apos;s machine in its own window.&lt;/P&gt;
&lt;P&gt;Of course the security implications are pretty drastic -- basically the external developer is downloading and executing an application over the Internet -- recipe for disaster. The solution to this terrible security problem is restricted trust: you must digitally sign the JAR file containing the test implementation of the web service, and the external developer must trust that your implementation will not do anything &quot;bad&quot; while it is running.&lt;/P&gt;
&lt;P&gt;I use this trick when I&apos;m developing a web service for consumption by a very few trusted and trusting external organizations. The external developer knows me and I know him, so this type of trusted applicatgion&amp;nbsp;is probably adequate. Of course if you are in a situation when this type of trust would not be appropriate, then of course you wouldn&apos;t want to use this trick.&lt;/P&gt;
&lt;P&gt;The important pieces of the trick are:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Packing up a test web service implementation as a web application -- a J2EE WAR file. 
&lt;LI&gt;Packing up the WAR file with a small J2EE Servlet container, such as Jetty. 
&lt;LI&gt;Building a JNLP main application that starts the small web server and makes it host the web service web-app.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Here is an example. Click on it and it will download an application that will host a &quot;Hello, World!&quot;-type web service locally. I have digitally signed the application JAR file, which means when you click on the link above you&apos;ll be asked whether or not you trust me to run an application &quot;without restrictions&quot; on your local machine. If you click &quot;yes&quot; then the application will run on your local machine, all with just a couple clicks of the mouse.&lt;/P&gt;
&lt;P&gt;To be honest, I&apos;m not sure you would want to click &quot;yes&quot; if you don&apos;t know me and trust me already. That&apos;s just asking for trouble, right? I could be a very clever hacker trying to take over your system through this blog entry. Instead you can download all my original source and an ANT build script, recompile and try running the application yourself (requires JDK 1.4+ and ANT installed). This gives you he chance to peruse the source code to make sure the test implementation won&apos;t try to do aything malicious to your system or your&amp;nbsp;local network.&lt;/P&gt;</description>
			<guid>http://www.blumenfeld-maso.com/weblog/2003/09/15.html#a42</guid>
			<pubDate>Mon, 15 Sep 2003 23:34:34 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114191&amp;amp;p=42&amp;amp;link=http%3A%2F%2Fwww.blumenfeld-maso.com%2Fweblog%2F2003%2F09%2F15.html%23a42</comments>
			</item>
		<item>
			<title>Java.net Community Page</title>
			<link>https://www.dev.java.net/servlets/ProjectList</link>
			<description>Somewhat based on the SourceForge model, Sun is hosting projects through &lt;A href=&quot;http://www.dev.java.net&quot;&gt;www.dev.java.net&lt;/A&gt;.</description>
			<guid>http://www.blumenfeld-maso.com/weblog/2003/09/15.html#a41</guid>
			<pubDate>Mon, 15 Sep 2003 18:00:48 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114191&amp;amp;p=41&amp;amp;link=http%3A%2F%2Fwww.blumenfeld-maso.com%2Fweblog%2F2003%2F09%2F15.html%23a41</comments>
			</item>
		<item>
			<title>&quot;X&quot;: A Language Based on the XML Infoset</title>
			<link>http://www.blumenfeld-maso.com/weblog/2003/08/27.html#a40</link>
			<description>&lt;P&gt;I&apos;ve been on a very long hiatus from blogging. In fact I&apos;d be surprised if anyone is even paying attention to this any more. I have a germ of an idea that I&apos;m starting to believe is not half-bad, and I have to memorialize it somewhere. So even if I&apos;m addressing a darkened, empty room, I have to at least voice this...&lt;/P&gt;
&lt;P&gt;I&apos;ve been doing a bit of web services in Java lately, and I&apos;ve come to these conclusions:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Object-to-XML (O/X) conversation layers stink. Only a subset of all&amp;nbsp;complex and simple&amp;nbsp;XML Schema node types can be accurately, unambiguously translated to object types in any popular OO language (C#, Java, C++, whatever). I&apos;m not talking about parsing serialized XML to a DOM representation. I&apos;m talking about generating an OOL type from a Schema type. For example, a Java class from an XML Schema complexType declaration.&lt;/LI&gt;
&lt;LI&gt;O/X conversion generates data-only classes. Classes generated from XML Schema have no specific behavior additions other than data accessors and validation. (Huh?) What I mean is that the generation of an OO&amp;nbsp;class from the xsi:anyComplexType definition can do anything and everything an OO class generated from someURI:myComplexClass can do. There&apos;s no &lt;EM&gt;behavior&lt;/EM&gt; in the specialized class. Why use an OO class at all? Just use DOM (or an equivalent) and save yourself a lot of unnecssary class generation.&lt;/LI&gt;&lt;/OL&gt;
&lt;H2&gt;Proposal&lt;/H2&gt;
&lt;P&gt;What about an OO language that uses the XML data model as the data model? It&apos;s crazy enough: it would actually work!&lt;/P&gt;
&lt;P&gt;What I mean is, instead of generating a class that kind of approximates an XML complexType, you have a language in which someURI:myComplexType is a first class object type. To get an idea, check out this type which describe a person entity in the HR domain:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT face=&quot;Courier, Monospace&quot;&gt;&lt;PRE&gt;&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt;
&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; someURI:Person complexType definition
&lt;a href=&quot;//&quot;&gt;//&lt;/a&gt;
namespace &quot;someURI&quot; as &quot;ns&quot;;
import schema &quot;http://www.w3.org/...&quot; as &quot;xsi&quot;;
public complexType Person
{
  &lt;a href=&quot;//...field&quot;&gt;//...field&lt;/a&gt; attributes capture aspects not associated with behavior. Fields are either
  &lt;a href=&quot;//&quot;&gt;//&lt;/a&gt;   elements or attributes. The first element&apos;s type is xsi:string. There are
  &lt;a href=&quot;//&quot;&gt;//&lt;/a&gt;   three element fields and one attribute field in this ns:Person type. The
  &lt;a href=&quot;//&quot;&gt;//&lt;/a&gt;   first two elements have type xsi:string. The attribute has type ns:employeeID,
  &lt;a href=&quot;//&quot;&gt;//&lt;/a&gt;   a simple type ostensibly defined within the same namespace. The final
  &lt;a href=&quot;//&quot;&gt;//&lt;/a&gt;   element field has value type xsi:integer...
  @public-read, @private-modify, @not-nill
    element(xsi:string) first-name;
  @public-read, @private-modify, @not-nill
    element(xsi:string) last-name;
  @public-read, @private-modify, @not-nill
    attribute(ns:employeeID) id;
  @public-read, @private-modify, @not-nill
    element(xsi:decimal) salary;

  &lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; Programmatic contructor, takes 4 arguments.&lt;BR&gt;  @public
  Person(xsi:string a-first-name, xsi:string a-last-name, ns:employeeID a-id, xsi:decimal a-salary)
  {&lt;BR&gt;    this/first-name = new element(xsi:string) {&quot;&quot;};
    this/first-name/value::. = a-first-name/value::.;&lt;BR&gt;
    this/last-name = new element(xsi:string) {&quot;&quot;};
    this/last-name/value::. = a-last-name/value::.;&lt;BR&gt;
    this/id = new attibute(ns:employeeID) {new ns:employeeID(0)};
    this/id/value::. = a-id/value::.;&lt;BR&gt;
    this/salary = new element(xsi:decimal) {0.0};
    this/salary/value::. = a-salary/value::.;
  }

  &lt;a href=&quot;//&quot;&gt;//&lt;/a&gt; Example method in this class.&lt;BR&gt;  @public
  void give-raise(xsi:decimal percent)
  {&lt;BR&gt;    &lt;a href=&quot;//&quot;&gt;//&lt;/a&gt;...&quot;-:&quot; below is an XPath shorthand for &quot;value::.&quot;...
    salary/value = salary/-: * (1.0 + percent);
  }
}
&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/PRE&gt;
&lt;P&gt;Some features of this proposed language to point out:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;An complex type may have one or more fields. Each field is an element or an attribute. The value type of the field is also declared.&lt;/LI&gt;
&lt;LI&gt;XPath is used to traverse the object graph. For example, &quot;this/first-name&quot; is an XPath expression that resolves to the single &quot;first-name&quot; child element field of the node references by &quot;this&quot;.&lt;/LI&gt;
&lt;LI&gt;The type-specific content of attributes and elements can be accessed using the synthetic XPath axis &quot;value::&quot;, which only allows a single suffix character &quot;.&quot;. That is, the type-specific value of a node is accessed using the XPath expression &quot;theNodeRef/value::.&quot;. A shorthand version &quot;-:&quot; could be invented, which means &quot;theNodeRef/value::. == theNodeRef/-:&quot; is true.&lt;/LI&gt;
&lt;LI&gt;Code attributes are used to further shade the declaration of fields, classes, and methods. In the sample code above, each field has the code attributes &quot;@public:read, @private:modify, @not-nill&quot;, which we assume a compiler and a runtime interpreter could understand.&lt;/LI&gt;&lt;/UL&gt;</description>
			<guid>http://www.blumenfeld-maso.com/weblog/2003/08/27.html#a40</guid>
			<pubDate>Wed, 27 Aug 2003 19:29:26 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114191&amp;amp;p=40&amp;amp;link=http%3A%2F%2Fwww.blumenfeld-maso.com%2Fweblog%2F2003%2F08%2F27.html%23a40</comments>
			</item>
		<item>
			<title>A Moment of Silence, Please</title>
			<link>http://www.bayarea.com/mld/mercurynews/news/5676110.htm</link>
			<description>&lt;p&gt;Codd&apos;s work in practical computer science is an undenyable foundational pillar of the whole industry. Compared to people like him, even the cleverest developers must feel their efforts miniscule, their significance fleeting.&lt;/p&gt;
&lt;p&gt;In the final accounting of my contributions to the world, may the logarithm of the magnitude of my impact compared to his be at least -4.&lt;/p&gt;</description>
			<guid>http://www.blumenfeld-maso.com/weblog/2003/04/23.html#a39</guid>
			<pubDate>Wed, 23 Apr 2003 19:26:33 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114191&amp;amp;p=39&amp;amp;link=http%3A%2F%2Fwww.blumenfeld-maso.com%2Fweblog%2F2003%2F04%2F23.html%23a39</comments>
			</item>
		<item>
			<title>SF Now Supports RSS Feeds</title>
			<link>https://sourceforge.net/docman/display_doc.php?docid=15483&amp;group_id=1</link>
			<description>Very cool. Now get project updates through your feed reader. Per-project and site-wide feeds available.</description>
			<guid>http://www.blumenfeld-maso.com/weblog/2003/03/19.html#a38</guid>
			<pubDate>Wed, 19 Mar 2003 19:03:57 GMT</pubDate>
			<comments>http://radiocomments.userland.com/comments?u=114191&amp;amp;p=38&amp;amp;link=http%3A%2F%2Fwww.blumenfeld-maso.com%2Fweblog%2F2003%2F03%2F19.html%23a38</comments>
			</item>
		</channel>
	</rss>
