<?xml version="1.0" encoding="ISO-8859-1"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en-US">
	<title>Google Summer of Tor 2010 - JTor Hidden Services</title>
	<link rel="alternate" type="text/html" href="http://www.korykirk.com/GSoC/2010/index.php" />
	<modified>2012-02-04T22:32:08Z</modified>
	<author>
		<name>Kory Kirk</name>
	</author>
	<copyright>Copyright 2012, Kory Kirk</copyright>
	<generator url="http://www.sourceforge.net/projects/sphpblog" version="0.5.1">SPHPBLOG</generator>
	<entry>
		<title>GSoC summer of Tor near the end.</title>
		<link rel="alternate" type="text/html" href="http://www.korykirk.com/GSoC/2010/index.php?entry=entry100809-193942" />
		<content type="text/html" mode="escaped"><![CDATA[Today is the unofficial pencils down date. Too bad I am not ready to put my pencil down yet. I have until Friday to pull everything together and complete what I have left, because that is the official pencils down date. I have had a lot of obstacles when facing the challenge of completing my project - both personal and comprehensive. For example, my HDD decided to not want to mount last week while I was out of town. Luckily I was able to get a new one salvage the data.<br /><br />There are a few bugs currently in the JTor code that I am not mantaining. The first being a problem with the directory fetching and storage of the list of routers. The list gets fetched and stored, but, I believe, that when the initial circuits are created the list gets emptied. The fix I have used for this is to just reload the router information before I have to use it.<br /><br />The second bug is a problem with the circuits connecting a stream to a destination. The circuits are created upon initialization, and when using the API to attempt to connect to a server over a Tor stream the stream rarely connects. This is apparently caused by JTor wanting a certain type of circuit but it not existing, so it waits indefinitely. These bugs among other missing functionality make it difficult to have a fully functioning Hidden Services. But I am providing as much functionality as I can so that when those features are fixed and others finished, it will work. In addition, since I am using test driven development I am writing all the tests to ensure the working state of hidden services come these features.  <br /><br />There are a few things that I have added placeholders for in the JTor code that do not exist yet. The first is creating circuits for Hidden Service connections. Currently the only circuits allowed are three hop ones and there wasn&#039;t a spot in the API to do otherwise. Also the CircuitManager class needs the ability to create exclusive circuits that will not be used regularly, like the ones between the hidden service and its introduction points. <br /><br />Looking at the list of features for my original proposal below - I am almost there. For the publication parts - I have completed the V2 Service Descriptor, the advertising of the descriptor. The bad directory checking needs to be added - that will be simple, because it is just a fetch of the descriptor after it has been published. Establishing of introduction points is difficult to verify because of the bug with sending data over a circuit. Fetching of the service descriptor, parsing, verification and periodic fetching have all been implemented. Only descriptor cookies are supported for authentication mechanisms right now. The cells have been created but not tested. I still need to write the tests for them and make sure they are complete. For configuration, I have implemented the ability to create a hidden service from a Tor client hidden service folder.  As for the authentication mechanisms, I am going to have to cut those off at descriptor cookie auth for the summer. I am still yet to merge my changes into the rend-spec that Karsten had modified. I am going to be working on the things mentioned as incomplete above until the end of the week. All these changes will be on my github. <br /> ]]></content>
		<id>http://www.korykirk.com/GSoC/2010/index.php?entry=entry100809-193942</id>
		<issued>2010-08-10T00:00:00Z</issued>
		<modified>2010-08-10T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Progress Report 2</title>
		<link rel="alternate" type="text/html" href="http://www.korykirk.com/GSoC/2010/index.php?entry=entry100621-224052" />
		<content type="text/html" mode="escaped"><![CDATA[I am not posting a pie chart for this progress report, because it would look like pac-man with the big slice reading something like &#039;silly bug hunt.&#039; I spent way too much time trying to fix the encoded output of the onion address. It turns out that the problem was that I was using the base32 encoding described in rfc4648 instead of rfc3548. It was a very big noob moment for me. Luckily it was a learning experience as I spent a lot of time making sure the PK was encoded correctly and that the hash was being performed correctly. But the reason it was a silly bug was because I hardly considered having the wrong rfc as the source of my problem. Either way I wasted some time that I really didn&#039;t want to. The good news is the onion address is now being created correctly (hooray?). I am going try not to dwell on it and focus on what I have done and what I am going to do in the next two weeks.<br /><br />I believe the output created by the JTor V2 Service Descriptor is accurate. My next step is to write the part of the client that fetches and parses the V2 service descriptor. That way I can run my test Hidden Service through Tor, fetch the descriptor through JTor and test it against the descriptor that I created. I say this so that I can work on parsing/fetching service descriptors, in addition the content of the service descriptor changes over time because of how the descriptor id is calculated. I can&#039;t compare the values without getting a recent service descriptor from directory services. <br /><br />As for the documentation, I have been focusing on rendclient and rendservice, the endpoints of hidden services and not so much on rendmid yet. I have found that the spec is lacking a lot in the parts for client authentication mechanisms. That is pretty obvious when you check out rend-spec and section 2&#039;s text just reads &#039;foo.&#039; I have been making notes about the changes from the proposals and added a new-rend-spec.txt to my git repo. I just need to dig into the tor code to be sure about what was actually implemented from the proposals.<br /><br />I am planning on working my ass off these next few weeks, because I feel kind of behind from losing a bunch of time this past week due to that silly bug. Also, after talking to my mentor I am trying to make the steps to be more vocal about my road blocks instead of being stubborn for fear of sounding noobish. I had told him about my problem initially, but there was some miscommunication where he thought I had solved the problem. Bottom line is that the more we discuss the better off I am.  <br /><br />Over and out.]]></content>
		<id>http://www.korykirk.com/GSoC/2010/index.php?entry=entry100621-224052</id>
		<issued>2010-06-22T00:00:00Z</issued>
		<modified>2010-06-22T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Progress Report</title>
		<link rel="alternate" type="text/html" href="http://www.korykirk.com/GSoC/2010/index.php?entry=entry100607-155815" />
		<content type="text/html" mode="escaped"><![CDATA[Two weeks into SoC already - that was fast. To make this exciting I made a pie chart of what I have been spending my time on (pie charts are exciting).<br /><br /><a href="javascript:openpopup('http://chart.apis.google.com/chart?cht=p3&amp;chs=400x100&amp;chd=t:30,50,18,2&amp;chl=Writing%20New%20Code|Going%20through%20Tor%20Code|Testing|Documentation',800,600,false);"><img src="http://chart.apis.google.com/chart?cht=p3&amp;chs=400x100&amp;chd=t:30,50,18,2&amp;chl=Writing%20New%20Code|Going%20through%20Tor%20Code|Testing|Documentation" border="0" alt="" /></a><br /><br />I have been spending a lot of my time going through the existing Tor code and seeing how it is implemented. This was a very daunting task initially, but Eclipse has made that task much easier. I have been refactoring my old code, making sure it is correct and writing Tests. I wrote some code to initialize a Hidden Service from a Tor hidden service directory, so that it would be easily compatible with that configuration. Currently I am working on making one of my tests pass - creating the same onion address for the service. Which, at the current point is not working - I believe it has something to do with the way I am hashing in the info or how I am converting it to base32 chars. <br /><br />My plan for the next two weeks is to drive on with tests. The next test I am writing is to make sure that the V2 Service descriptor created is the same as Tor. Once that part is successful, I will write the tests for establishing intro points and publishing the service descriptor. Once all of those pass, publishing will be mostly done (with the exception of client authentication, which will probably not fit in these two weeks). Be sure to check my github to see my code, any suggestions are encouraged.<br /><br />]]></content>
		<id>http://www.korykirk.com/GSoC/2010/index.php?entry=entry100607-155815</id>
		<issued>2010-06-07T00:00:00Z</issued>
		<modified>2010-06-07T00:00:00Z</modified>
	</entry>
	<entry>
		<title>So it begins...</title>
		<link rel="alternate" type="text/html" href="http://www.korykirk.com/GSoC/2010/index.php?entry=entry100526-102736" />
		<content type="text/html" mode="escaped"><![CDATA[Hooray, GSoC is finally here - and I am a little behind. Spent the first two days of GSoC moving from Philadelphia to Austin. But now I am settled and I have the internet, and so it begins. I am going to take on the V2 Service Descriptors first. The Service Descriptor holds the information necessary to connect to the Hidden Service. I am going to need a way to ensure that the service descriptor that JTor creates would be the same as the one created (with the same keypair, port etc.) by Tor. So I need to create a method to facilitate this testing along with the actual descriptor code.]]></content>
		<id>http://www.korykirk.com/GSoC/2010/index.php?entry=entry100526-102736</id>
		<issued>2010-05-26T00:00:00Z</issued>
		<modified>2010-05-26T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Photo of Bob by Alice</title>
		<link rel="alternate" type="text/html" href="http://www.korykirk.com/GSoC/2010/index.php?entry=entry100519-182525" />
		<content type="text/html" mode="escaped"><![CDATA[My friend whipped up this spoof on the painting &quot;The Son of Man&quot; by Magritte, that is an onion in front of his face. <a href="javascript:openpopup('http://korykirk.com/dump/tor.png',800,1095,false);"><img src="http://korykirk.com/dump/tor.png" width="320" height="458" border="0" alt="" id="img_float_left" /></a>]]></content>
		<id>http://www.korykirk.com/GSoC/2010/index.php?entry=entry100519-182525</id>
		<issued>2010-05-20T00:00:00Z</issued>
		<modified>2010-05-20T00:00:00Z</modified>
	</entry>
	<entry>
		<title>JTor Google Summer of Code 2010 Proposal</title>
		<link rel="alternate" type="text/html" href="http://www.korykirk.com/GSoC/2010/index.php?entry=entry100513-152607" />
		<content type="text/html" mode="escaped"><![CDATA[<p> </p> <p>Kory Kirk</p> <p>Google Summer of Tor: JTor's Hidden Services</p> <p><span><strong><span><br />1.</span></strong></span><strong>              </strong><span><strong><span>What project would you like to work on? Use our ideas lists as a starting point or make up your own idea. Your proposal should include high-level descriptions of what you're going to do, with more details about the parts you expect to be tricky. Your proposal should also try to break down the project into tasks of a fairly fine granularity, and convince us you have a plan for finishing it.</span></strong></span></p> <p> </p> <p><span><span>   I would like to work on JTor! Last semester I attended a class called Distributed Systems. For part of this class we had to take on a semester-long project where we implemented (part of) a distributed system. Most of the other students in the class took projects where not implementation was needed. I chose to take a go at Hidden Services.  Having recently dined with Roger and Jake, I decided to take on a part of JTor as my </span></span><span><span>class </span></span><span><span>project. JTor was just starting out, and because of its infantile nature I was suggested a task that was easily compartmentalized - Hidden Services. </span></span></p> <p><span><span>   I t</span></span><span><span>ried to write</span></span><span><span> Hidden Services</span></span><span><span> with the same style as the rest of JTor. I</span></span><span><span> scoured the </span></span><span><span>rend-</span></span><span><span>spec and made my own notes. By the end of the semester came, the project was not near usable completion. I had gotten a lot of the basic components of the Hidden Services done, like the V2 descriptor, but did not get a chance to pull it all together into a working part of the library. And some parts were left largely untouched like connecting to a hidden service. <span> A log of the work (and some assignments) done can be found at <a href="http://korykirk.com/CSC8530/">http://korykirk.com/CSC8530/</a></span></span></span></p> <p><a href="http://korykirk.com/CSC8530/"></a>     <span><span>For GSoC, I will complete JTor Hidden services. I believe one of the most important parts will be ensuring that accessing and publishing a HiddenService through JTor should look identical to Tor on the wire.  Being that I will be building this project up from scratch, and referring to the implementation of Tor Hidden Services, I would also like to update rend-spec to reflect any inconsistencies between the spec and actual implementation</span></span><span><span> (due to possible undocumented revisions, partially implemented proposals, older protocol compatability, etc.)</span></span><span><span>.</span></span><span><span> I foresee the rewrite as a gradual </span></span><span><span>process that would span </span></span><span><span>the length of </span></span><span><span>GSoC. </span></span></p> <p><span><span>Below I have outlined what I believe to be the major components of the project</span></span><span><span>:</span></span></p> <p><span><strong><span>JTor Hidden Services</span></strong></span></p> <p><span><em><span>main focus points: Hidden Service publication and Hidden Service access.</span></em></span></p> <p> </p> <ul> <li>   <span><span>Hidden Service Publication</span></span> <ul> <li><span><span>V2 </span></span><span><span>Service Descriptor</span></span> <ul> <li> <span><span>Currently implemented V2 service descriptor </span></span><span><span>as described in rend-spec</span></span><span><span>.</span></span></li> <li><span><span> Need to verify correct encoding of descriptor-id and descriptor content</span></span><span><span>.</span></span></li> </ul> </li> </ul> <ul> <li><span>Advertising Service Descriptor</span> <ul> <li> <span><span>Choosing </span></span><span><span>non-adjacent directory servers to be responsible </span></span><span><span>(114)</span></span></li> <li><span><span>Publishing  to 4 non-consecutive directory nodes, and 2 consecutive (for 0.2.0.x support)</span></span></li> </ul> </li> </ul> <ul> <li><span>Bad directory reporting</span> <ul> <li>check if responsible directory server 404ing to the service descriptor request. <ul> <li>http post complaint if 404 </li> </ul> </li> </ul> </li> </ul> <ul> <li><span>Establishing introduction points</span></li> </ul> <ul> <li>  <ul> <li><span><span><span>RELAY_ESTABLISH_INTRO</span></span></span><span><span><span> cell</span></span></span></li> </ul> <ul> <li><span>post request to the directory server</span></li> </ul> <ul> <li><span>Organizing new key pairs for each introduction point.</span></li> </ul> </li> <li><span>Accepting hidden service connections from clients. </span></li> </ul> </li> <li><span>Hidden Service Access</span> <ul> <li><span>Fetching V2 Service descriptors</span> <ul> <li><span>parsing and  caching V2</span></li> <li><span>verifying descriptor-id from v2</span></li> <li><span>periodic fetch</span></li> </ul> </li> <li><span>Establishing Rendevous points</span> <ul> <li>circuit</li> </ul> </li> <li>Optional client authentication with auth-data or descriptor cookie</li> <li>Connecting to hidden service servers.</li> </ul> </li> <li>Cells <ul> <li>Lots of cells need to be created (which shouldn't be too hard becauese of CellImpl)</li> </ul> <ul> <li>  <ul> <li><span>RELAY_ESTABLISH_RENDEZVOUS, <span><span>RELAY_ESTABLISH_INTRO, INTRODUCE2, <span><span>RELAY_INTRODUCE1V,  <span><span><span>INTRODUCE2 v3,   <span><span>ESTABLISH_INTRO v2</span></span></span></span></span></span></span></span></span></span></li> </ul> </li> </ul> </li> <li><span>Configuration file</span> <ul> <li><span><span>Retain settings </span></span><span><span>and data </span></span><span><span>fo</span></span><span><span>r a specific Hidden Service.</span></span></li> <li><span><span>Allow for granular con</span></span><span><span>trol  of </span></span><span><span>HiddenService, its </span></span><span><span>supported protocols and authentication mechanisms</span></span><span><span>.</span></span></li> <li><span><span>use JTor to interface w/ config or edit by hand</span></span></li> </ul> </li> <li><span><span>Authorization </span></span><span><span>mechanisms</span></span> <ul> <li><span>Client authorization at directory</span></li> <li><span><span>Client presence of descriptor cookie</span></span><span><span> (partially implemente</span></span><span><span>d) </span></span><span><span>upload Multiple descriptors with different descriptor cookies delayed (< 30 sec)</span></span></li> <li> <span><span><span>Client authorization at introduction point</span></span></span></li> <li>create abstract class for Authentication Mechanisms to be implemented in the future</li> <li>Currently do not plan on implementing any directory or intro point authentication mechanisms, but will allow for use of them.  </li> </ul> </li> </ul> <p> </p> <p> Roadmap:</p> <p>    Week 1-4: Finish V2 Descriptor, Implement HiddenService publishing to directory services, checking for bad directories, relevant cells and the hidden service configuration file. Finish publish portion of  Hidden Services.  Ensure that rend-spec correctly reflects everything needed to implement publishing.</p> <p>    Week 5-9: Descriptor fetching and verification, establishing and creating circuits to rend points, connecting to a hidden services,  implement relevant cells, support for authorization mechanisms, update any part of rend-spec that is inaccurate for accessing hidden services.</p> <p>    Week  10-12: Documentation and rigorous testing, prepare for release of JTor - help with any addition documentation, tests or changes that need to be made before release.</p> <p><span><span>2.</span></span>            <strong>  </strong><span><span><strong>Point us to a code sample: something good and clean to demonstrate that you know what you're doing, ideally from an existing project.</strong></span></span></p> <p><a href="http://github.com/koryk/JTor"><span><span><span><span>http://github.com/koryk/JTor</span></span></span></span></a><span><span>  - my contribution is the hiddenservices package (and I think one method somewhere in crypto).</span></span></p> <p><a href="http://github.com/koryk/GAC"><span><span><span><span>http://github.com/koryk/GAC</span></span></span></span></a><span><span> - Genetic Algorithm Comparator – this is a project I am still working on for my graduate thesis – I wrote it using the dANN framework to gather comparative data about the Genetic Wavelet Algorithm and Simple Genetic Algorithm.</span></span></p> <p><a href="https://github.com/ajpalkovic/b2010/tree/kory"><span><span><span><span>https://github.com/ajpalkovic/b2010/tree/kory</span></span></span></span></a><span><span> - This is the code for my team’s submission to this year’s MIT Battlecode programming competition.</span></span></p> <p><a href="http://korykirk.com/java.html"><span><span><span><span>http://korykirk.com/java.html</span></span></span></span></a><span><span> - this is a page with a bunch of older projects from when I was an undergrad.</span></span></p> <p> </p> <p><span><span><strong>3.</strong></span></span><strong>              </strong><span><span><strong>Why do you want to work with The Tor Project / EFF in particular?</strong></span></span></p> <p><span><span>Being involved with the Tor project last summer has really sparked an involvement in the open source community for me. I like the underlying idea behind Tor and especially the idea that it helps people with oppressive governments access the internet (because I want people to visit my website (just kidding, because I love the internet)). I recently became a member of the EFF in December. </span></span></p> <p><span><span>    I first heard about the EFF in my Ethics in Computing class (Which I am now a teaching assistant for), and was immediately drawn to the EFF after reading ‘Coming into the Country’ by John Perry Barlow.  The metaphor of the cyberspace frontier really resonated with me as to why the internet is so special, how it is a new frontier that needs to be kept free and protected. I think the EFF and Tor are doing a good job of that, and so I want to contribute in any way I can.</span></span></p> <p><span><span><strong>4.</strong></span></span><strong>              </strong><span><span><strong>Tell us about your experiences in free software development environments. We especially want to hear examples of how you have collaborated with others rather than just working on a project by yourself.</strong></span></span></p> <p><span><span>Last summer, working on Torbutton was my first contribution to any open source project. Since then I have a part of a few open source projects including JTor, dANN (Java AI framework) and imgur Firefox extension. All of the collaboration I have done has been over IRC.  I spent a big chunk of this semester working on an Java AI programming competition hosted by MIT called Battlecode. This was a collaboration between a few students, writing our team on and using git for version control. I also participated in the ACM ICPC (international collegiate programming contest), where a team of 3 has 5 hours to do 8 programming problems. My team used Java and placed 2nd in the local competition (greater Philadelphia area) and 9th in the Regional competition (Mid-atlantic region). I have a lot of experience working closely with others on code.</span></span></p> <p> </p> <p><span><span>5.</span></span>              <span><span><strong>Will you be working full-time on the project for the summer, or will you have other commitments too (a second job, classes, etc)? If you won't be available full-time, please explain, and list timing if you know them for other major deadlines (e.g. exams). Having other activities isn't a deal-breaker, but we don't want to be surprised.</strong></span></span></p> <p><span><span>This summer I have no obligations. I am finishing up my Masters next month, and moving back to Texas where I plan to spend the summer looking for a job (for after the summer), working on GSoC and maybe doing some freelance stuff.</span></span></p> <p> </p> <p><span><span><strong>6.</strong></span></span><strong>              </strong><span><span><strong>Will your project need more work and/or maintenance after the summer ends? What are the chances you will stick around and help out with that and other related projects?</strong></span></span></p> <p><span>I think that my project will need maintenance, and I would like to be a part of JTor and work on it in the future, not just this summer. Java is my best language, and I think it would be the area of Tor I can contribute to the most. Now that I am done with school, I will have a lot more time to dedicate myself to personal projects instead of academic projects, and I consider JTor a personal project .</span></p> <p> </p> <p><span><span><strong>7.</strong></span></span><strong>              </strong><span><span><strong>What is your ideal approach to keeping everybody informed of your progress, problems, and questions over the course of the project? Said another way, how much of a "manager" will you need your mentor to be?</strong></span></span></p> <p>              <span><span>I do not think my mentor needs to be much of a manager, I am usually self-motivated. I would like to use my mentor as a backboard for ideas or a feedback machine rather than as a boss-figure. Last year I kept a blog of my progress, and I will do that again and document and describe my progress, changes to the code, and obstacles. My git commit messages are a good way to find information about progress on smaller steps of the project. </span></span></p> <p><span><span><strong>8.</strong></span></span><strong>              </strong><span><span><strong>What school are you attending? What year are you, and what's your major/degree/focus? If you're part of a research group, which one?</strong></span></span></p> <p> </p> <p><span><span>I am attending Villanova University outside of Philadelphia. I am in a Computer Science Masters program that will be finished in May. I am a graduate assistant so I owe the Computer Science Department 20 hours a week. My assignment from the past two semesters includes: teaching assistant for three Algorithm and Data structure classes (Java programming) and Ethics in Computing, the Research Assistant for Machine Learning and Data Mining class, and worked at the computer science help desk. The help desk is a one man tutoring center where any computer science student can come ask help on projects mostly in Java or C.</span></span></p> <p><span><span>The research I have been doing has been my own. Last semester I did an independent study which I have continued to research as my Master’s thesis. The project is surrounding a new type of genetic algorithm called the Genetic Wavelet Algorithm (GWA). I have been doing research to formally describe it and compare it to the classical genetic algorithm. The GWA is implemented in a open source AI library called dANN, </span></span><a href="http://wiki.syncleus.com/index.php/DANN"><span><span><span><span>http://wiki.syncleus.com/index.php/DANN</span></span></span></span></a><span><span>, parts of my thesis can be found in the Genetic Wavelet section. I have also written code to contribute to the implementation of the Genetic Wavelet Algorithm.</span></span></p> <p><span><span>9.</span></span>              <span><span>How can we contact you to ask you further questions? Google doesn't share your contact details with us automatically, so you should include that in your application. In addition, what's your IRC nickname? Interacting with us on IRC will help us get to know you, and help you get to know our community.</span></span></p> <p>              <span><span>I am almost always on freenode (in various channels), usually on oftc in #tor and #tor-dev. I usually operate under the nick koryk or koryk1 (sometimes toryk). You can also e-mail me at </span></span><a><span><span><span><span>kory.kirk@gmail.com</span></span></span></span></a><span><span>.</span></span></p> <p> </p> <p><span><span>10.</span></span>              <span><span>Is there anything else we should know that will make us like your project more?</span></span></p> <p>     I believe I can complete this project resulting in a robust and flexible package for the JTor library. Other than that, there is nothing I can think of that will make you like my project more, so here are a few random facts about me:</p> <p>- My great uncle invented the footlong hotdog (I know... how could someone invent a long hotdog? I was just always told this by my family growing up)</p> <p>- I can bend my finger back to touch my hand.</p> <p>- I have a genetic mutation that causes me to have freakishly low cholesterol (I am one of the X-Men)</p> <p>- I always try to program a task in as few lines of code as possible</p> <p>  In addition here is a short brainstorm of possible other names for the project beside JTor:</p> <p>- Onion Jar, layered ogre,  coffee leek (like leek a type of onion), jleek, jbulb, onion bulb, Allium</p> <p>    those are all onion or java related, if you want more suggestions let me know.   </p> <p> </p> <p> </p>]]></content>
		<id>http://www.korykirk.com/GSoC/2010/index.php?entry=entry100513-152607</id>
		<issued>2010-05-13T00:00:00Z</issued>
		<modified>2010-05-13T00:00:00Z</modified>
	</entry>
</feed>

