Ik gebruik emule nu al een tijdje en op zich vind ik het een mooi programma. Goede downloads, veel te krijgen en bijna geen fakes. Maar het heeft ook een paar nadelen. FF een klein lijstje:
- MD4 hashes. Deze zijn, zover ik begrepen heb, redelijk gevoelig voor fraude. Dummy files, zouden goede geldige hashes kunnen krijgen waardoor je download uiteindelijk corrupt raakt.
- Geen encryptie. Verbindingen zijn niet ge-encrypt (zover ik weet). Deze zijn dus vrij makkelijk af te 'luisteren'.
- Geen anonimiteit. Vrij belangrijk tegenwoordig, met al die big-brother praktijken.
- Niet populaire files zijn wel te vinden, maar soms toch niet te downloaden als er maar een x aantal users de file hebben.
Er zullen ongetwijfeld nog meer nadelen aan emule kleven, maar dit vond ik ff de belangrijkste. Wat is nu mijn idee? Waarom niet met een paar andere mensen die in VC++ kunnen programmeren een super mooie en goede client (en server) schrijven? De bedoeling van deze draad is, om te kijken of er mensen interesse zouden hebben in zo'n client en of er mensen zijn, die mee willen helpen met het proggen van de client én server....
Welke ideeen heb ik zoal voor de client:
- File cache. De server houdt statestieken bij van files (hash code) over een periode van bv twee dagen. Aan de hand van die statestieken kan hij bepalen of een file zeldzaam is of niet. Samen met andere servers geven ze een x aantal clients de opdracht om op de achtergrond stukken van die file (of zelfs helemaal) te downloaden (client krijgt dan prioriteit bij de aanbieder om te downloaden). De gebruiker van de client weet hier niks van (hij weet alleen dat er en cache transfer bezig is en met hoeveel KB/sec). De clients worden dus gebruikt als een soort cache. Als een file voor bv 1 a 2 maanden niet opgevraagd is, dan wordt de file verwijderd uit de cache van de client. De cache is overigens ge-encrypt en de gebruiker van de client kan niet zien welke files er in de cache staan. Hij heeft hier geen controle over. Dit brengt mij meteen bij hetvolgende punt, namelijk....
- Privacy en anonimiteit. Omdat de cache ge-encrypt is en omdat de gebruiker van de client niet weet wat er in de cache staat, kan deze nooit verantwoordelijk gehouden worden voor de inhoud. Omdat er ook geen verschil zichtbaar is tijdens het zoeken van files of deze in de cache staan of aangeboden worden, kan men nooit met zekerheid zeggen, dat de file expres geshared wordt of niet. Men heeft dus niks aan een ip-adres.
- Alle gegevens van en naar clients/servers, zijn ge-encrypt. Afluisteren is dus (theoretisch) onmogeljk.
- Een hash manier (bv MD5) die zo secure is, dat deze niet te faken is. Dummy files op het netwerk zetten heeft zo geen nut.
- User rating van files. Door files te raten, kan men zien hoe de kwaliteit van de file is. Bv is de file wat de titel zegt dat ie is? Is het beeld van een film van goede kwaliteit? Enz...
- Credits systeem zoals bij emule. Leechers hebben op deze manier veel minder kans van slagen.
- Intelligent source exchange. Als een client bv een file vraagt aan de server, zal deze clients kiezen die de file hebben, en die de server nog niet zovaak doorgegeven heeft aan een client die de file zocht (zo werkt de emule/edonkey sever ook zeg maar). Echter, als een client aan een andere client vraagt, of deze nog sources kent voor de gevraagde file, dan zal deze ook clients doorgeven, die bij hem in de qeue staan, maar nog niet gedownload hebben. Omdat deze clients de file uiteindelijk ook zullen krijgen (of stukken ervan), wordt de load beter verdeeld tussen clients. Ik heb nog niet heel erg goed nagedacht over source exchange, omdat ik dat pas wil doen, als het project doorgaat.
- Tijdens zoeken en downloaden van de files, zijn de aanbieders niet bekend (ip kan altijd via een omweg opgevraagd worden). Zoals boven eerder vermeld, is het ook niet belangrijk of iemand een ip weet of niet, omdat diegene die download nooit met zekerheid kan zeggen of de aanbieder de file echt aanbied, of omdat deze in uit de cache komt.
- Eventueel opensource. Ik heb nog niet zoveel ervaring met opensource, en omdat encryptie belangrijk is, wil ik niet dat dit naar buiten zou komen. Misschien dat iemand die mij wil helpen in het project daar meer van weet...
- Beschrijvingen en dergelijke aan de files meegeven. Net zoiets als kazaa. Dit is duidelijker voor degene die de file wil downloaden. Gegevens van bv bitrate, fps, compressie, enz worden voor veel files al door de client weergegeven.
Voor de server heb ik ook nog ideeen, maar ik begin zere vingers te krijgen, dus misschien een andere keer. Wat ik dus wil weten van jullie:
- Zijn jullie geinteresseerd in zo'n applicatie? (Ik weet dat er in principe zoiets al is, namelijk freenet)
- Ik kan dit zeker niet alleen. Wie wil mij actief meehelpen met het ontwerpen van protocol, client, server, etc?
Het is iig een leerzaam project en een flinke uitdaging!
- MD4 hashes. Deze zijn, zover ik begrepen heb, redelijk gevoelig voor fraude. Dummy files, zouden goede geldige hashes kunnen krijgen waardoor je download uiteindelijk corrupt raakt.
- Geen encryptie. Verbindingen zijn niet ge-encrypt (zover ik weet). Deze zijn dus vrij makkelijk af te 'luisteren'.
- Geen anonimiteit. Vrij belangrijk tegenwoordig, met al die big-brother praktijken.
- Niet populaire files zijn wel te vinden, maar soms toch niet te downloaden als er maar een x aantal users de file hebben.
Er zullen ongetwijfeld nog meer nadelen aan emule kleven, maar dit vond ik ff de belangrijkste. Wat is nu mijn idee? Waarom niet met een paar andere mensen die in VC++ kunnen programmeren een super mooie en goede client (en server) schrijven? De bedoeling van deze draad is, om te kijken of er mensen interesse zouden hebben in zo'n client en of er mensen zijn, die mee willen helpen met het proggen van de client én server....
Welke ideeen heb ik zoal voor de client:
- File cache. De server houdt statestieken bij van files (hash code) over een periode van bv twee dagen. Aan de hand van die statestieken kan hij bepalen of een file zeldzaam is of niet. Samen met andere servers geven ze een x aantal clients de opdracht om op de achtergrond stukken van die file (of zelfs helemaal) te downloaden (client krijgt dan prioriteit bij de aanbieder om te downloaden). De gebruiker van de client weet hier niks van (hij weet alleen dat er en cache transfer bezig is en met hoeveel KB/sec). De clients worden dus gebruikt als een soort cache. Als een file voor bv 1 a 2 maanden niet opgevraagd is, dan wordt de file verwijderd uit de cache van de client. De cache is overigens ge-encrypt en de gebruiker van de client kan niet zien welke files er in de cache staan. Hij heeft hier geen controle over. Dit brengt mij meteen bij hetvolgende punt, namelijk....
- Privacy en anonimiteit. Omdat de cache ge-encrypt is en omdat de gebruiker van de client niet weet wat er in de cache staat, kan deze nooit verantwoordelijk gehouden worden voor de inhoud. Omdat er ook geen verschil zichtbaar is tijdens het zoeken van files of deze in de cache staan of aangeboden worden, kan men nooit met zekerheid zeggen, dat de file expres geshared wordt of niet. Men heeft dus niks aan een ip-adres.
- Alle gegevens van en naar clients/servers, zijn ge-encrypt. Afluisteren is dus (theoretisch) onmogeljk.
- Een hash manier (bv MD5) die zo secure is, dat deze niet te faken is. Dummy files op het netwerk zetten heeft zo geen nut.
- User rating van files. Door files te raten, kan men zien hoe de kwaliteit van de file is. Bv is de file wat de titel zegt dat ie is? Is het beeld van een film van goede kwaliteit? Enz...
- Credits systeem zoals bij emule. Leechers hebben op deze manier veel minder kans van slagen.
- Intelligent source exchange. Als een client bv een file vraagt aan de server, zal deze clients kiezen die de file hebben, en die de server nog niet zovaak doorgegeven heeft aan een client die de file zocht (zo werkt de emule/edonkey sever ook zeg maar). Echter, als een client aan een andere client vraagt, of deze nog sources kent voor de gevraagde file, dan zal deze ook clients doorgeven, die bij hem in de qeue staan, maar nog niet gedownload hebben. Omdat deze clients de file uiteindelijk ook zullen krijgen (of stukken ervan), wordt de load beter verdeeld tussen clients. Ik heb nog niet heel erg goed nagedacht over source exchange, omdat ik dat pas wil doen, als het project doorgaat.
- Tijdens zoeken en downloaden van de files, zijn de aanbieders niet bekend (ip kan altijd via een omweg opgevraagd worden). Zoals boven eerder vermeld, is het ook niet belangrijk of iemand een ip weet of niet, omdat diegene die download nooit met zekerheid kan zeggen of de aanbieder de file echt aanbied, of omdat deze in uit de cache komt.
- Eventueel opensource. Ik heb nog niet zoveel ervaring met opensource, en omdat encryptie belangrijk is, wil ik niet dat dit naar buiten zou komen. Misschien dat iemand die mij wil helpen in het project daar meer van weet...
- Beschrijvingen en dergelijke aan de files meegeven. Net zoiets als kazaa. Dit is duidelijker voor degene die de file wil downloaden. Gegevens van bv bitrate, fps, compressie, enz worden voor veel files al door de client weergegeven.
Voor de server heb ik ook nog ideeen, maar ik begin zere vingers te krijgen, dus misschien een andere keer. Wat ik dus wil weten van jullie:
- Zijn jullie geinteresseerd in zo'n applicatie? (Ik weet dat er in principe zoiets al is, namelijk freenet)
- Ik kan dit zeker niet alleen. Wie wil mij actief meehelpen met het ontwerpen van protocol, client, server, etc?
Het is iig een leerzaam project en een flinke uitdaging!