Mega-cloudservice. Cloudopslag MEGA

Herinnert u zich de tijden nog waarin 40 GB opslagruimte op uw computer een onbetaalbare luxe leek? Nu gaat de telling in honderden gigabytes, en vaak in terabytes, en we zijn hier zo aan gewend dat we zonder onderscheid ruimte in beslag nemen op pc-schijven - met alles.

Ondertussen zijn besparingen en comfort nog niet tenietgedaan en bewijzen het bestaan, de welvaart en de mooie vooruitzichten van cloudopslag hun waarde. De afgelopen jaren hebben de diensten van dergelijke internetdiensten zich met grote stappen ontwikkeld, en er kunnen verschillende cloudgegevensopslagen als voorbeeld worden genoemd:

1. Yandex.Disk – biedt beginners 5 GB vrije ruimte voor het opslaan van bestanden verschillende formaten en uitbreidingen plus verschillende bonussen. Als u bijvoorbeeld Yandex-mail al 5 jaar gebruikt, krijgt u nog eens 2 GB schijfruimte.
2. Google Drive– gratis 15 GB ruimte.
3. Microsoft SkyDrive - 7 GB gratis in plaats van de eerder aangeboden 25 GB.
4. – 2 GB plus uitbreiding schijfruimte voor het aantrekken van verwijzingen.
5. Apple iCloud – 5 gratis gigabytes aan ruimte.
6. – hier kunt u gratis maximaal 40 MB per biljet lenen en het verkeersvolume gebruiken voor het schrijven/bewerken van notities tot 60 MB per maand.
7. Amazon Google Drive - 5 GB.
8. Cloudservicebox - 5 GB.
9. SugarSync-service - 5 GB.
10. Cloud opslag Mega.co.nz – 50 GB vrije schijfruimte.

Cloudopslag Mega.co.nz

Alle bovenstaande services kunnen niet alleen op desktop-pc's werken, maar op iedereen mobiele applicaties, wat ongetwijfeld de reikwijdte van hun toepassing vergroot en hun populariteit vergroot. Maar de leider in de gratis aangeboden gigabytes is nog steeds Mega.co.nz - 50 GB is geen grap, je moet er nog steeds in slagen om het met iets te vullen, dus ik stel voor dat we meer in detail praten over deze cloudservice - Mega.co. nl. Ik gebruik deze service trouwens actief, omdat deze stabiel en anoniem is en de makers ervan bekende mensen zijn.

Het hoofd van het bedrijf dat de diensten van deze opslagfaciliteit aanbiedt, is Kim Dotcom, oprichter van de dienst Megaupload, die twee jaar geleden werd gesloten in opdracht van het ministerie van Justitie en de FBI van Amerika. Misschien kent u dat verhaal nog. Eigenlijk was hun oude wisselaar best handig. Maar nu is Kim's nieuwe creatie nog cooler geworden. Laten we er meer in detail over praten.

Nu biedt de Mega-service niet alleen de gebruikelijke opslag van gegevens in de cloud op een pc, maar, zoals de ontwikkelaars eerder beloofden, hebben ze al de mogelijkheid toegevoegd om vanaf mobiele apparaten te werken - iPhone, iPad, apparaten op Win 8, montage bestandssysteem voor Windows, enz. Dat wil zeggen dat het mogelijk wordt om bestanden rechtstreeks naar de cloud te sturen. Uw foto's van uw smartphone worden bijvoorbeeld opgeslagen in de gadget, maar worden tegelijkertijd overgebracht naar Mega.сo.nz, zodat de mogelijkheid van onverwacht verlies of beschadiging van bestanden volledig wordt geëlimineerd. Al uw gegevens worden tijdens de verzending gecodeerd en niemand anders dan u kunt ze uitpakken om ze te lezen.

Voordelen en verschillen van Mega

1. Het belangrijkste kenmerk en verschil tussen de Mega.co.nz-cloudservice en soortgelijke bronnen in de voorgestelde initiaal gratis volume Schijfruimte – 50 GB. Bij Mega.co.nz kun je bestanden van elk formaat, met elke extensie en in elk formaat uploaden - er zijn wat dit betreft geen beperkingen.

2. De afkorting MEGA is de naam van “MEGA Encrypted Global Access”.

3. De belangrijkste kenmerken van Mega zijn hetzelfde als die van andere bronnen: downloaden en opslaan van bestanden schijf van derden en de mogelijkheid om bestanden te delen met uw vrienden en collega's door links door te geven of gecodeerde toegang. Bestandsversleuteling in de browser vindt plaats met behulp van AES-algoritme, dat wil zeggen dat u wordt beschermd tegen ongeoorloofde toegang. Bestandsoverdrachtskoppelingen zijn ook gecodeerd en zelfs servicemedewerkers hebben geen toegang tot uw gegevens. Dat is tenminste wat ze beweren.

4. De service voor het uitwisselen en opslaan van Mega-bestanden is meertalig, dus u zult geen taalproblemen ondervinden als u ermee werkt - selecteer gewoon de gewenste taal in het configuratiescherm.

Maar om cloudopslag te gaan gebruiken, moet u een eenvoudige registratieprocedure doorlopen.

Registreren en aan de slag gaan met Mega.co.nz

Zoals uit de registratielink blijkt, gebeurt het inloggen op de site https://mega.co.nz/ via een beveiligde verbinding. Vervolgens moet u op de hoofdpagina de Russische taal selecteren handig werk– het menu bevindt zich rechtsboven. Nu kunt u zich inschrijven:

Bij het registreren heeft u een echt e-mailadres nodig, de rest van de gegevens kunt u eenvoudig uit uw hoofd halen. Nadat we alle velden hebben ingevuld en op de knop ‘Account aanmaken’ hebben geklikt, sturen we je een e-mail er komt een brief met een link die onze registratie bevestigt:

Klik op deze link in de brief en bevestig uw account op de servicepagina - hiervoor vindt u aan de rechterkant een formulier bovenste hoek, dat wil zeggen dat u eenvoudigweg uw e-mailadres en wachtwoord invoert. Dit gebeurt eenmalig, daarna gebruikt de service onze browsercookies. Bij het bevestigen van de registratie wordt ons gevraagd om onze eigen individuele sleutel aan te maken, die onze authenticatie zal bepalen. Het maken van een sleutel heeft een speels karakter en ik werd er zelfs door meegesleept, waardoor ik het moment miste waarop de sleutel al was gemaakt.

Het spel lijkt op het uitschakelen van stenen met een bal, waaruit de MEGA-inscriptie bestaat. Zodra u 100% bereikt op de schaal bovenaan het scherm, wordt er een sleutel aangemaakt:

En nadat u op de knop “Voltooien” hebt geklikt, gaat u naar uw pagina in de Mega.co.nz-cloudservice:

Hoe de Mega.co.nz-service te gebruiken

Er is een heel klein verschil in het gebruik van de service bij het werken aan en Google Chrome, waar ik het hieronder over zal hebben. Laten we het in de tussentijd hebben over algemene controle- en gebruikspunten. Aan de rechterkant van uw pagina ziet u een controlekolom en een weergave van de opslagstructuur. Bovenaan bevindt zich een menu voor het downloaden, bekijken en beheren van bestanden. Dat wil zeggen dat u in het vervolgkeuzemenu voor reeds gedownloade bestanden de mogelijkheid ziet om een ​​link naar het bestand te krijgen, de mogelijkheid om het te kopiëren, te bewerken, enz.

Browsergebruikers Mozilla Firefox kunnen een add-on in hun browser installeren MEGA-extensie. De ontwikkelaars van deze add-on beloven dat u na installatie een aanzienlijke verbetering in de downloadsnelheid van uw bestanden zult merken. Dit resultaat wordt verzekerd door batchgewijs een onbeperkt aantal bestanden te uploaden zonder hun grootte te beperken. Elke link in de Mega.co.nz-service wordt vastgelegd door uw MEGA-extensietoepassing en blijft lokaal (JavaScript-scripts worden niet gedownload van servers). Betrouwbaar automatische updates de dienst wordt geleverd dankzij een cryptografische handtekening met een gecodeerde sleutel.

Om efficiënter met de Mega-service te kunnen werken, raden ontwikkelaars aan om, zonder deze add-on te installeren, de Google Chrome-browser te gebruiken. Omdat ik mijn hele computerleven verschillende browsers heb gebruikt, heb ik de aanbevolen extensie in Firefox geïnstalleerd, maar eerlijk gezegd merkte ik geen enkel verschil in de werking van de cloudservice. De applicatie kan zowel vanuit de “Add-ons” van de browser als vanuit de MEGA-service (“Menu” – “Applicaties” – “Firefox-applicatie”) worden geïnstalleerd

Het is beter om de Google Chrome browser te gebruiken als je hele mappen met bestanden naar de cloud gaat uploaden - Mozilla heeft deze optie niet, maar Chrome kan zowel bestanden als mappen uploaden:

Zo ziet het opslagcontrolepaneel eruit in de Google Chrome-browser, maar in Mozilla Firefox is er simpelweg geen knop 'Map uploaden' - er is alleen een knop 'Bestand uploaden'. Met de knop “Bestand uploaden” kunt u vanaf uw computer een bestand naar de cloud uploaden persoonlijke computer. Nadat u in Google Chrome op de knop ‘Map uploaden’ hebt geklikt, wordt een Verkenner-venster geopend waarin u een map selecteert waarnaar u deze wilt uploaden bestandsopslag, en dat is alles: het downloaden is begonnen.

Laten we het nu hebben over hoe u dit probleem in Firefox kunt omzeilen. Stel dat u de hele map wilt downloaden. Installeer hiervoor niet nieuwe browser! Vervolgens hoeft u alleen maar een map met dezelfde naam aan te maken in Mega (het item “Nieuwe map” in het menu) en alle bestanden daarin te uploaden (druk op Ctrl + A om ze allemaal tegelijk te selecteren) die zich in dezelfde map bevinden. map op de computer.

We blijven ons vertrouwd maken met de service. In het item “Mijn account” ziet u niet alleen dat u een gratis account gebruikt, maar ziet u ook de hoeveelheid gebruikte cloudruimte en kunt u ook uw profielinstellingen wijzigen of de gegevensoverdracht configureren:

In de instellingen (“Menu” - “Mijn Account”) kun je veel doen. Wijzig bijvoorbeeld het aantal parallelle verbindingen voor het downloaden van bestanden, evenals het aantal parallelle verbindingen voor het downloaden van bestanden. Ook kun je een limiet stellen aan de downloadsnelheid.

Als u op de menuknop “Menu” - “Mijn account” klikt, kunt u meer te weten komen over de regels voor het gebruik van de Mega.co.nz-clouddienst. Ik zal je niet veel vertellen over het Pro-account, aangezien ik het nog niet heb gebruikt - de gratis 50 GB is voldoende. Maar nadat u op de knop 'Uw status upgraden' in uw gratis account, je kunt er een kiezen betaald pakket van de aangeboden versies om een ​​groter volume van uw gegevens in de cloud op te slaan - van 500 GB tot 96 TB. Persoonlijk kan ik me zo'n volume - 96 terabytes - niet voorstellen, maar als je goed nadenkt, kun je toch een gebruik vinden. Bijvoorbeeld voor het maken van back-ups van websitedatabases, enz.

Laten we doorgaan met het werken met bestanden - u kunt eenvoudig een nieuwe map maken waarin u enkele thematische bestanden kunt uploaden. Om dit te doen, klikt u op de knop "Nieuwe map" en hernoemt u de map zoals u nodig hebt. In deze nieuwe map kunt u ook andere submappen aanmaken waarin u bestanden kunt uploaden. Als u op een map (bestand) klikt klik met de rechtermuisknop muis, dan ziet u in het pop-upcontextmenu de overeenkomstige opdrachten voor uw acties met de map (bestand). Zoals je kunt zien zijn er veel mogelijkheden, waaronder de mogelijkheid om een ​​link te ontvangen en door te geven aan andere gebruikers. De link wordt gecodeerd.

Als u de downloadsnelheid van bestanden niet hebt beperkt in uw cloudinstellingen, is de downloadsnelheid van gegevens onbeperkt en alleen afhankelijk van de snelheid van de internetverbinding van uw pc. Verder werken met mappen/bestanden gebeurt op precies dezelfde manier als in gewone computer– u kunt ze bewerken, er koppelingen naar krijgen, ze verplaatsen, gedeelde toegang tot ze toestaan, ze kopiëren, enz. Het proces van het uploaden en downloaden van bestanden wordt rechts onderaan de pagina van de service weergegeven - klik op het pictogram

Mappen delen

U kunt openbare toegangsrechten instellen voor de mappen die u in de Mega co nz-cloudopslag opslaat. Om dit te doen, klikt u eenvoudig met de rechtermuisknop op de map en klikt u in het contextmenu dat verschijnt op 'Delen'. Vervolgens ziet u het venster ‘Delen’, waarin u het e-mailadres moet opgeven van de gebruiker aan wie u deelrechten wilt verlenen. Voor deze gebruiker kunt u rechten configureren, bijvoorbeeld de rechten instellen op "Alleen lezen", "Lezen en schrijven", " Volledige toegang" Hierna kunnen de deelrechten gebruikers met de door u ingestelde rechten toestaan ​​om bestanden te bewerken, of alleen te bekijken, of alleen te downloaden. Er kunnen een willekeurig aantal van dergelijke gebruikers zijn.

Nadat we het e-mailadres hebben opgegeven voor het verlenen van publieke toegang, wordt er een brief naar zijn e-mail gestuurd met een link die nodig is om naar de service te gaan en toegang te krijgen tot de opgegeven map. De mappen die worden gedeeld verschillen enigszins in verschijning uit de rest van de mappen voor cloudopslag en ziet er als volgt uit:

Hoe u een link naar Mega.co.nz kunt krijgen

Met de Mega.co.nz-service kunt u andere gebruikers voorzien van links om bestanden te downloaden die u host op de Mega-cloudservice. Om een ​​dergelijke link te krijgen, klikt u met de rechtermuisknop op het bestand en klikt u in het contextmenu dat verschijnt op het menu-item "Koppeling ophalen". In een nieuw venster dat wordt geopend, ziet u uw (gecodeerde of ongecodeerde) link om het bestand te downloaden. Over het algemeen worden alle links om bestanden te downloaden in de Mega.co.nz-cloudservice in twee typen uitgegeven, en het type link hangt af van de mate van vertrouwelijkheid van de beveiligingssleutels.

Als de link zelf in niet-gecodeerde vorm wordt gevormd, wordt het bestand nog steeds gecodeerd verzonden, en alleen als de gebruiker deze link volgt, wordt het bestand gedecodeerd en beschikbaar om te downloaden. Dat wil zeggen dat totdat iemand dit bestand downloadt, het in gecodeerde vorm wordt opgeslagen. Als de link zelf versleuteld is, wordt alleen de gebruiker die de link naar het bestand heeft ontvangen, meegestuurd speciale code veiligheidssleutel). Zonder deze beveiligingscode kan de ontvanger het bestand via de link niet downloaden.

In de onderstaande afbeelding kunt u zien dat als de optie “Met bestandssleutel” is geactiveerd, de gecodeerde code in de link zelf is ingebed en voor alle gebruikers kan worden gedownload. En omgekeerd: als u dit vakje niet aanvinkt, kan de doelgebruiker het bestand alleen downloaden als hij de sleutel invoert die u afzonderlijk heeft opgegeven.

Ook kan de gebruiker voor wie de link naar het bestand bedoeld was, deze opslaan in zijn cloud op Mega.co.nz. Om dit te doen, moet u, nadat u de link heeft ontvangen, op de knop "Importeren" klikken. Met deze optie wordt de link niet naar uw computer gedownload, maar eenvoudigweg van het ene account naar het andere verplaatst. Het is duidelijk dat het voor het uitvoeren van een dergelijke handeling noodzakelijk is dat de ontvanger ook over eigen schijfruimte beschikt in de Mega.co.nz-cloud, net zoals bijvoorbeeld in . Je kunt al deze mogelijkheden zien in de onderstaande figuur:

Hoe download ik een link met een individuele sleutel (tweede optie)? Hieronder in de afbeelding zie je zijn oplossing. In het geval van een afzonderlijk overgedragen sleutel kan de ontvanger het bestand downloaden als hij van u zowel een link als een sleutel ontvangt om het bestand uit de cloudopslag te downloaden. U ontvangt de sleutel zelf door deze te kopiëren bij het overbrengen van het bestand (in de afbeelding hierboven staat het item “Copy Keys”). Al deze gegevens (zowel de gedeelde link als de link met een aparte sleutel) stuur je via reguliere e-mail naar de gebruiker.

Nadat de gebruiker op de link “Decoderen” heeft geklikt, moet de gebruiker in een nieuw venster de van u ontvangen beveiligingssleutel invoeren om het bestand te downloaden of op te slaan in zijn eigen cloudopslag. Nadat de sleutel is ingevoerd, moet de gebruiker op de knop ‘Downloaden’ klikken en het vakje ‘Ik ga akkoord met de servicevoorwaarden van MEGA’ aanvinken, of het bestand eenvoudigweg naar zijn cloud importeren.

Nadat het bestand volledig is gedownload, wordt het venster “Download voltooid” geopend, waarin de gebruiker wordt gevraagd het bestand handmatig op te slaan in een willekeurige map. gunstige locatie op de computer.

En ten slotte alle bestanden die door u op de service worden geplaatst cloud opslag De gegevens van Mega.co.nz worden gecodeerd - ik heb hier hierboven al over gesproken. Aan de ene kant is dit geweldig, maar aan de andere kant kun je de inhoud ervan niet visueel bekijken, audio- en videobestanden afspelen of beluisteren terwijl ze in de cloud staan. Dat wil zeggen dat u, om deze bestanden te kunnen gebruiken, ze naar uw computer moet verplaatsen of mobiel apparaat. Om alle gedownloade bestanden volledig te verwijderen, moet u ze naar de prullenbak verplaatsen en deze vervolgens ook leegmaken.

Hallo.

Sommige gebruikers dwongen me dit artikel met hun gezeur te schrijven. Er verschenen steeds meer coole materialen op de site, die kunnen worden gedownload via de Mega-cloudopslag. Zoals de tijd heeft geleerd, kunnen veel gebruikers de cursus niet downloaden. De vraag rijst meteen: "Waarom heb je een cursus nodig als je niet eens de eenvoudigste handeling kunt uitvoeren, hoe kun je het materiaal downloaden?!" Als deze opmerkingen eerder een glimlach en gelach veroorzaakten, is het nu een beetje vervelend geworden en lijken degenen die dergelijke opmerkingen schrijven op een oerspons, zoals in de preview voor dit artikel. In de toekomst (in de zeer nabije toekomst) worden omvangrijke coole materialen verwacht die beschikbaar zullen zijn om te downloaden via Mega. Als u problemen ondervindt bij het downloaden- lees dit artikel, aangezien deze kwestie niet opnieuw ter sprake zal komen en niemand, in het belang van sommige gebruikers, materiaal in honderden stukken zal opdelen en deze opnieuw naar andere repository's zal uploaden. Gebruikers die blijven zeuren, worden gestuurd om pc-vaardigheden te leren en worden tijdelijk geïsoleerd van de samenleving.

Laten we eens kijken waarom Mega? Alles is heel eenvoudig. Voor ons is dit een handige opslagfaciliteit, waar er geen beperkingen zijn aan de hoeveelheid geüpload materiaal, waar de schijfcapaciteit groot is en waar klachten serieus worden genomen. Materialen voor gebruikers zijn gratis beschikbaar, dus leer downloaden of download helemaal niet. Laten we ervan uitgaan dat je de gewenste cursus hebt gevonden en deze naar Mega is geüpload. Zorg er allereerst voor dat de opslag zelf opengaat. Als Mega niet beschikbaar is in jouw land (sommige providers blokkeren opslag), gebruik dan een proxy of VPN om de blokkering te omzeilen. Het eenvoudigste wat nu nog overblijft, is het downloaden van het materiaal. Er zijn er 2 meest eenvoudige manieren downloads:

1 manier. Deze methode is geschikt voor het downloaden van kleine bestanden. Gebruik methode 2 om grote bestanden te downloaden. Eerste manier- Dit is om te downloaden via een gewone browser. Zoals de praktijk heeft uitgewezen, werkt de Google Chrome-browser het beste met Mega. Daarom raden wij aan om het te gebruiken. Hoe te downloaden via browser: Eerst wordt het materiaal naar de cache gedownload en nadat het volledig is gedownload, kunt u het in elke map opslaan (als de mapselectie niet is geconfigureerd, wordt het materiaal opgeslagen in de downloadmap).

Klik op de knop "Downloaden in browser" en wacht tot het downloaden is voltooid. Je kunt het tabblad niet sluiten!

Je kunt ook software van Mega - MegaSync gebruiken en bestanden synchroniseren, maar we hebben deze downloadmethode niet geprobeerd, hoewel sommige gebruikers deze specifieke methode prijzen. Volgens sommige gebruikers moet je voor succesvol downloaden ook bestanden naar je clouddrive importeren, maar over het algemeen is dit niet nodig. Na het downloaden groot bestand via een browser raden wij u aan de browsercache te wissen, bijvoorbeeld met behulp van het hulpprogramma CCleaner.

Methode 2. Downloaden met het Mipony-programma. Mipony-programma kan worden gedownload van de officiële website. We raden aan deze methode te gebruiken, omdat het programma erg handig is en veel voordelen heeft. De software ondersteunt bijvoorbeeld het hervatten van bestanden (zoals een torrent) en maakt geen tijdelijke bestanden aan, in tegenstelling tot downloaden via een browser. Sommige antivirusprogramma's vloeken misschien tegen het programma, maar daar is niets mis mee. Het programma steelt niets en is niet kwaadaardig. Paranoïde mensen kunnen het programma op een virtuele machine gebruiken. Installeer het programma (alles is heel eenvoudig) en start het. Open eerst het tabblad “Opties” en zorg ervoor dat daar geen snelheidslimiet staat.

Na de lancering van de enigszins schandalige MEGA-service begonnen de gesprekken over de beveiliging ervan een beetje te koken en stierven ze weg. Tegenwoordig leeft de dienst zijn eigen leven en niemand heeft hem zelfs maar gebroken. Om de een of andere reden werd de term “User Controlled Encryption” (UCE, of User Controlled Cryptography), waar MEGA trots op is, gemist in alle gesprekken. Wat ik bedoel met "gemist" is het feit dat we niet alle mogelijkheden hebben besproken die een cryptografie-engine die in JavaScript draait aan de clientzijde ons biedt.

Natuurlijk, ikzelf MEGA-service dit betekent simpelweg dat de encryptiesleutels niet op de server worden opgeslagen, maar allemaal hun cryptografie wordt uitgevoerd in de context van de browser. Bovendien werd er na de lancering van de dienst veel gepraat over het feit dat deze onstabiel gebruikt cryptografische algoritmen en dat over het algemeen alles slecht is en dat we allemaal zullen sterven, en dat de FSB onze bestanden zal lezen. Dit bracht mij op het idee om het concept van “UCE” uit te breiden en echt de controle over de cryptografie over te nemen, namelijk door enkele beveiligingsmechanismen van de dienst te vervangen of aan te vullen.

In dit artikel zal ik een deel van de magie uiteenzetten die in twee megabytes MEGA JavaScript-code plaatsvindt en laten zien hoe je sommige methoden kunt omzeilen om je geen zorgen meer te maken en van cryptografie te gaan houden. Als gevolg hiervan ontvangen we een cloudopslagservice voor bestanden met tweefactorauthenticatie en kritische hardware-encryptie belangrijke gegevens.

MEGA, UCE en alles, alles, alles

Laten we dus beginnen met te kijken naar de technologieën waarop het clientgedeelte van de service is gebouwd, hoe nieuwe gebruikers worden geregistreerd, geregistreerde gebruikers worden geverifieerd, wachtwoorden worden gewijzigd en bestanden worden geüpload/gedownload.

JavaScript

Zoals u wellicht al weet, is de gehele clientzijde van de service gebaseerd op JavaScript, in de code Startpagina SHA-256-controlesommen zijn gespecificeerd voor alle scripts en pagina's die door de browser worden geladen. Het downloaden zelf gebeurt als volgt: voor alle bestanden worden checksums gecontroleerd, waarna ze worden gecombineerd tot één BLOB, die aan de browser wordt gegeven. Uit de broncode van de js-bestanden blijkt dat ze zijn geschreven verschillende mensen en soms zijn er grappige pareltjes, zoals de gevolgen van copy-paste, betekenisloze voorwaarden en simpelweg vreemde variabelen.

Tijdens het studeren broncode Ik heb ook gemerkt dat de site behoorlijk actief wordt bijgewerkt, dat de ontwikkelaars kleine fouten corrigeren en de reeds geschreven code optimaliseren, wat goed nieuws is. De code zelf is heel eenvoudig en zonder onnodige prototyping geschreven: de site gebruikt driehonderd globale variabelen en meer dan 8.000 functies. Het was heel gemakkelijk om de architectuur van de site te begrijpen en de code ervan te wijzigen.

Onder de frameworks van derden gebruikt MEGA jQuery (je kunt nu niet meer zonder), Ext JS en SJCL. Deze laatste implementeert een cryptografische kern met AES-codering. SJCL biedt ook een interessant formaat voor het opslaan van sleutels en andere byte-arrays: in plaats van bytes simpelweg in een gewone array op te slaan, worden ze “gecomprimeerd” in een formaat dat a32 wordt genoemd. De essentie ervan is dat de inhoud van elke byte-array wordt verpakt in 32-bits getallen en geschreven in een array met een kortere lengte. Dat wil zeggen dat elke 4 bytes van de array worden omgezet in één banale int. De sitecode bevat functies die allerlei transformaties uitvoeren op een geïmproviseerde set (a32 array, string, base64 string).

Belangrijke informatie

Voordat we verder gaan met de beschrijving van de registratie- en authenticatieprocessen, is het de moeite waard om de informatie te overwegen die onderhevig is aan codering, namelijk:
  • Hoofdsleutel rekening , die willekeurig wordt aangemaakt op het moment van gebruikersregistratie en een lengte heeft van 128 bits. En in principe de lengte van alle gebruikte sleutels symmetrische encryptie, is gelijk aan 128 bits.
  • RSA-privésleutel: Gemaakt op het moment van registratie op basis van muisbewegingen en toetsenbordinvoer. In dit artikel zal ik me niet concentreren op asymmetrische cryptografie, omdat deze wordt gebruikt voor het delen van gedownloade bestanden, en het was mijn taak om het proces van authenticatie en codering van gebruikersgegevens te veranderen.
  • Individuele bestandssleutels en de bestanden zelf, geüpload naar de dienst. De sleutels worden willekeurig gegenereerd wanneer een bestand wordt geladen, de sleutel zelf wordt gebruikt om de bestandsgegevens te coderen, en een sleutel die is gemaakt op basis van de individuele sleutel van het bestand en de controlesom ervan wordt gebruikt om de attributen te coderen.

Dichter bij de code

Nu stel ik voor om de registratie- en authenticatieprocessen te analyseren, te zien hoe de hoofdsleutel wordt gemaakt en hoe deze wordt gecodeerd.
Ik heb geprobeerd deze processen op papier weer te geven en om je inzicht te geven in de essentie van de waanzin, heb ik zelfs deze foto gemaakt:

nieuwe gebruiker registratie

Het registratieproces zelf is behoorlijk verwarrend; nadat de gebruiker de vragenlijst heeft ingevuld, worden er een groot aantal functies aangeroepen, maar we zijn geïnteresseerd in de functie api_createuser:

// een nieuwe gebruiker en zijn hoofdsleutelfunctie aanmaken api_createuser(ctx, invitecode, invitename, uh) ( var i; var ssc = Array(4); // session self challenge, zal worden gebruikt om het wachtwoord te verifiëren var req, res; if (!ctx.passwordkey) ( ctx.passwordkey = Array(4); for (i = 4; i--;) ctx.passwordkey[i] = rand(0x100000000); ) if (!u_k) api_create_u_k(); // het genereren van een willekeurige hoofdsleutel u_k voor (i = 4; i--;) ssc[i] = rand(0x100000000); // het genereren van een willekeurige authenticatiereeks if (d) console.log("api_createuser - masterkey: " + u_k + "passwordkey:" + ctx.passwordkey); // codeer de hoofdsleutel van het huidige wachtwoord en stuur deze naar de server (veld k) // het ts-veld is de aaneenschakeling van ssc met zijn gecodeerde waarde req = ( a: "omhoog", k: a32_to_base64(encrypt_key(nieuwe sjcl.cipher.aes(ctx.passwordkey), u_k)), ts: base64urlencode(a32_to_str(ssc) + a32_to_str(encrypt_key(nieuwe sjcl.cipher.aes(u_k) , ssc))) ); if (uitnodigingscode) ( req.uh = uh; req.ic = uitnodigingscode; req.name = uitnodigingsnaam; ) if (d) console.log("Opslagsleutel: " + req.k); api_req(, ctx); )
In deze functie zijn wij geïnteresseerd in de volgende zaken:

  • u_k is de hoofdsleutel zelf, een globale variabele. Een array van 4 32-bits getallen, die wordt gemaakt door de functie api_create_uk
  • ssc is eenvoudigweg een willekeurige array die is gecodeerd met de hoofdsleutel, samengevoegd met de openbare waarde ervan en naar de server is verzonden. Later zal het worden gebruikt om de juistheid van de hoofdsleutel tijdens authenticatie te controleren
  • sjcl - cryptografische bibliotheek die AES implementeert
  • rand() - implementatie van lokale generator pseudowillekeurige getallen, gebaseerd op RC4
  • encrypt_key() is de hoeksteenfunctie van de symmetrische cryptografie van de service. Accepteert een sjcl-object dat is geïnitialiseerd met een sleutel en een array die moet worden gecodeerd. De functiecode wordt hieronder gegeven en heeft hopelijk geen uitleg nodig.
// codeer/decodeer 4- of 8-elementen 32-bit integer array-functie encrypt_key(cipher, a) ( if (a.length == 4) return cipher.encrypt(a); var x = ; for (var i = 0;< a.length; i += 4) x = x.concat(cipher.encrypt(, a, a, a])); return x; }
Hierdoor wordt na registratie het volgende naar de server verzonden:
  • Hoofdsleutel gecodeerd met de sleutel die is afgeleid van het accountwachtwoord
  • Tekenreeks zoals ssc||encrypt_AES-128(u_k, ssc)

Gebruiker login

Nu kunt u soepel doorgaan naar het authenticatieproces. In het kort gaat het als volgt:
  1. De gebruiker voert login/wachtwoord in
  2. Als de eerste authenticatiefase is voltooid, worden een gecodeerde hoofdsleutel en een authenticatiereeks (ssc) die tijdens de registratie zijn aangemaakt, ontvangen van de server
  3. De hoofdsleutel wordt gedecodeerd met behulp van het door de gebruiker ingevoerde wachtwoord
  4. De authenticatiereeks wordt op de hoofdsleutel gedecodeerd en vergeleken met de open waarde ervan, waardoor de juistheid van de hoofdsleutel en het wachtwoord wordt gecontroleerd.
De api_getsid2 callback-functie is verantwoordelijk voor al het bovenstaande:

// de hoofdsleutel decoderen nadat de gebruiker zich heeft aangemeld bij de functie api_getsid2(res, ctx) ( var t, k; var r = false; if (typeof res == "object") ( // initialiseer sjcl-aes met het huidige account wachtwoord var aes = new sjcl.cipher.aes(ctx.passwordkey); // of we een hoofdsleutel hebben ontvangen in het serverantwoord... if (typeof res.k == "string") ( k = base64_to_a32(res. k); if (k.length == 4) ( // ... decodeer het dan k = decrypt_key(aes, k); // en initialiseer sjcl-aes opnieuw met behulp van de hoofdsleutel aes = new sjcl.cipher. aes( k); // als we ssc hebben ontvangen van het registratieproces if (typeof res.tsid == "string") ( t = base64urldecode(res.tsid); // codeer de eerste helft van de string en vergelijk deze met de waarde van de server // als ze overeenkomen - dit betekent dat alle logins en wachtwoorden overeenkomen en je kunt de gebruiker binnenlaten if (a32_to_str(encrypt_key(aes, str_to_a32(t.substr(0, 16)))) == t .substr(-16)) r = ) // De privésleutel van het RSA-paar wordt hieronder geanalyseerd, we zijn hier nog niet in geïnteresseerd, anders if (typeof res.csid == "string") ( var t = mpi2b(base64urldecode (res.csid)); var privk = a32_to_str(decrypt_key(aes, base64_to_a32(res.privk))); var rsa_privk = Array(4); // privésleutel ontleden voor (var i = 0; i< 4; i++) { var l = ((privk.charCodeAt(0) * 256 + privk.charCodeAt(1) + 7) >> 3) + 2; rsa_privk[i] = mpi2b(privk.substr(0, l)); if (typeof rsa_privk[i] == "aantal") break; privk = privk.substr(l); ) // controleer het formaat if (i == 4 && privk.length< 16) { // TODO: check remaining padding for added early wrong password detection likelihood r = ; } } } } } ctx.result(ctx, r); }
Als bonus bij registratie/authenticatie kunt u het wachtwoordwijzigingsproces bekijken.

// verander de gebruikerswachtwoordfunctie changepw(currentpw, newpw, ctx) ( var pw_aes = new sjcl.cipher.aes(prepare_key_pw(newpw)); api_req([( a: "up", currk: a32_to_base64(encrypt_key(new sjcl .cipher.aes(prepare_key_pw(currentpw)), u_k)), k: a32_to_base64(encrypt_key(pw_aes, u_k)), uh: stringhash(u_attr["e-mail"].toLowerCase(), pw_aes) )], ctx);
De code voor deze functie spreekt voor zich: we coderen de hoofdsleutel met twee sleutels verkregen uit het oude en nieuwe wachtwoord, en sturen deze waarden vervolgens naar de server. Als het huidige wachtwoord correct is, wordt het vervangen door een nieuw wachtwoord. Hier wilde ik meer aandacht vestigen op de functie prepare_key_pw, die impliciet aanwezig was in alle voorgaande bewerkingen. Zijn taak is om het stringwachtwoord om te zetten in een a32-array en vervolgens de sleutelafleidingsbewerking als volgt uit te voeren:

// converteer door de gebruiker opgegeven wachtwoordarrayfunctie prepare_key(a) ( var i, j, r; var aes = ; var pkey = ; for (j = 0; j< a.length; j += 4) { key = ; for (i = 0; i < 4; i++) if (i + j < a.length) key[i] = a; aes.push(new sjcl.cipher.aes(key)); } for (r = 65536; r--;) for (j = 0; j < aes.length; j++) pkey = aes[j].encrypt(pkey); return pkey; }
Deze functie heeft veel kritiek opgeleverd omdat deze gebaseerd is op een algoritme van eigen bodem. Tijdens het schrijven van dit artikel slaagden de makers van de dienst erin de code een beetje te wijzigen, maar ik merkte geen significante veranderingen op. De essentie ervan is dat het verzonden wachtwoord 65536 keer wordt gecodeerd met een constante sleutel om een ​​sleutel te verkrijgen die niet van een willekeurige sleutel te onderscheiden is. Waarom de makers van de dienst geen gebruik maakten van bestaande algoritmen (bijvoorbeeld PBKDF2) blijft een mysterie.

Bestanden uploaden en coderen

In het kort kan dit hele proces als volgt worden weergegeven:

Ik waarschuw je, lang in dit beeld duiken is gevaarlijk voor de hersenen, dus hieronder zal ik je vertellen hoe het allemaal gebeurt.

Zoals ik al zei, creëert elk bestand bij het laden zijn eigen willekeurige arraysleutel van 6 32-bits getallen. De eerste vier elementen van deze array worden gebruikt om de inhoud van het bestand te coderen, en de laatste twee worden gebruikt als de initiële waarden van de teller die wordt gebruikt om de controlesom van het bestand te berekenen. Deze array wordt opgeslagen in de globale variabele ul_key. De inhoud ervan wordt ingevoerd in de JSON-serialized string ul_KeyNonce .

De decodering zelf vindt plaats met met behulp van internet Worker (als de browser deze technologie ondersteunt) of gewoon in de hoofdpaginacode. Wanneer een bestand klaar is om te worden verzonden, a nieuwe sleutel filekey gebaseerd op ul_key en file checksum. Deze sleutel wordt vervolgens gecodeerd met de hoofdsleutel en samen met de bestandskenmerken naar de server verzonden. De functies initupload3 en api_completeupload2 zijn verantwoordelijk voor al deze acties. De filekey wordt aangemaakt in de ul_chunkcomplete functie, hieronder zal ik een deel ervan geven.

// begin met het uploaden van een bestand: maak de individuele sleutel aan en initialiseer de coderingsmechanismefunctie initupload3() ( // ... cut =) // maak een willekeurige individuele sleutel voor het bestand // ul_key wordt gebruikt in paginacode, // ul_keyNonce wordt doorgegeven aan de Web Worker en wordt daar gebruikt // om het bestand te coderen en de controlesom ervan te berekenen ul_key = Array(6); voor (i = 6; i--;) ul_key[i] = rand(0x100000000); ul_keyNonce = JSON.stringify(ul_key); ul_macs = ; // ... het volgende is het verwerken van de downloadwachtrij, het is niet interessant... // sjcl-aes initialiseren voor een bestand gebaseerd op ul_key ul_aes = new sjcl.cipher.aes(); // ... // het uploaden van bestanden starten: // het lezen vanaf schijf, coderen en verzenden van onUploadStart(ul_queue_num); ul_dispatch_chain(); ) // een sleutel maken om de bestandskenmerken te coderen, functie ul_chunkcomplete(slot,pos,response) ( // ... var t = ; // ul_macs - een array met de bestandscontrolesom verkregen in de worker voor (p in ul_macs) t .push(p); // een tijdelijke array vullen en sorteren, als iemand weet waarom, leg dan uit t.sort(function(a,b) ( return parseInt(a)-parseInt(b) ));< t.length; i++) t[i] = ul_macs]; // внутри condenseMacs производится зашифрование // и "уплотнение" контрольной суммы файла в массив из 4х элементов var mac = condenseMacs(t,ul_key); ul_settimeout(-1); // на основе контрольной суммы и ключа файла создается ключ для шифрования атрибутов // он же в зашифрованном виде позже будет отправлен на сервер var filekey = ; // ... } // завершение загрузки файла: зашифрование атрибутов и ключа файла и отправка их на сервер function api_completeupload2(ctx, ut) { var p; if (ctx.path && ctx.path != ctx.n && (p = ctx.path.indexOf("/")) >0) ( var pc = ctx.path.substr(0, p); ctx.path = ctx.path.substr(p + 1); fm_requestfolderid(ut, pc, ctx); ) else ( // codeer de bestandsnaam naar sleutel afgeleid van ul_key en checksum // ctx.k == filekey a = ( n: ctx.n ); if (d) console.log(ctx.k); if (d) console.log(ea); // overdracht van attributen en bestandssleutel gecodeerd op de hoofdsleutel var req = ( a: "p", t: ut, n: [( h: ctx.t, t: 0, a: ab_to_base64(ea), // attributen k: a32_to_base64(encrypt_key(u_k_aes, ctx.k)), // == AES_encrypt(u_k, filekey) fa: ctx.fa )] // een doel heeft geleverd: versleutel naar alle relevante shares var sn = fm_getsharenodes(ut); if (sn.length) ( req.cr = crypto_makecr(, sn, false); req.cr = ctx.t; ) ) api_req(, ctx. ctx);

Bestanden downloaden en decoderen

Het is duidelijk dat deze processen eenvoudigweg het omgekeerde moeten zijn van het coderen van het bestand. Het enige dat van belang kan zijn, is het verkrijgen van de waarde van de ul_key-sleutel uit de gecodeerde bestandssleutelwaarde die van de server kwam.

Op het moment dat het bestand wordt gedownload, bevat de browsercontext al een object dat de gedecodeerde bestandssleutels opslaat. Daarom is het logisch om eerst het proces te overwegen dat onmiddellijk na gebruikersauthenticatie plaatsvindt, namelijk het downloaden van bestandsbeheer. Nadat de gebruiker tot de dienst is toegelaten, wil hij uiteraard toegang krijgen tot zijn bestanden (ervan uitgaande dat hij ze daar al had). Om dit te doen, moeten we eerst de bestandssleutels decoderen en vervolgens hun attributen. Deze kwestie wordt afgehandeld door een ander pakket functies, waarvan we geïnteresseerd zijn in loadfm_callback en process_f_f .

In het kort kan het proces voor het verkrijgen van bestandskenmerken worden beschreven door het volgende algoritme:

  1. Wacht tot de bestandsbeheerder is geladen (loadfm_callback), waar je JSON kunt krijgen met een beschrijving van alle gedownloade bestanden
  2. Maak een array farray waarin u een array met informatie over bestanden kunt plaatsen
  3. Voer (recursief) de functie process_f_f uit voor elk bestand
  4. Voor elk bestand dat een sleutel heeft, decodeert u die sleutel en attributen (crypto_processkey-functie) en slaat u ze weer op in een array met bestandsinformatie
  5. Sla daarna de gedecodeerde waarden op in de FileStore-variabele (einde van recursie in process_f_f)
Hieronder zal ik codefragmenten geven die dit algoritme illustreren

// callback voor het laden van de bestandsbeheerfunctie loadfm_callback(json, res) ( // ... // verwerking van JSON met informatie over bestanden json = json; if (d) console.log(json); if (d) console. log (json); if (json.u) process_u(json.u, false); if (json.ok) process_ok(json.s) ( voor (i in json.s) ( if ( u_sharekeys.h]) ( sharingData.push(( id: json.s[i].h + "_" + json.s[i].u, gebruikers-id: json.s[i].u, map-id: json .s[i].h, rechten: json.s[i].r, datum: json.s[i].ts )); sharednodes.h] = true ) ) // ... verder niets bijzonders; .. // informatie over de bestanden invoeren in een andere globale array farray = new Object farray.f = json.f // de verwerking ervan begint, de callback is hierboven gedeclareerd // in deze functie en wijzigt eenvoudig de lay-out process_f(. fi, false , callback fi++; ) // recursieve functie waarin bestandssleutels en attributen worden gedecodeerd // aangeroepen vanuit de process_f-functie process_f_f(fid) ( // recursie-eindvoorwaarde - we hebben alle bestanden in de farray-array verwerkt if ( !farray.f.i ]) ( if (farray.ap) FileStore.suspendEvents(); // gegevens schrijven naar FileStore FileStore.loadData(farray.mdata, true); if (farray.ap) FileStore.resumeEvents(); if (d) console.log("call reqmissingkeys:"); crypto_reqmissingkeys(); if (farray.callback) farray.callback.fn(farray.callback); retour vals; ) var f = farray.f.i]; f.attrs = f.a; if (f.sk) u_sharekeys = crypto_process_sharekey(f.h, f.sk); // als het bestand overeenkomt met het type en een sleutel heeft, verwerk het dan if ((f.t !== 2) && (f.t !== 3) && (f.t !== 4) && (f.k)) ( crypto_processkey(u_handle , u_k_aes , f); // beschrijving van deze functie hieronder u_nodekeys = f.key ((typeof f.name !== "ongedefinieerd") && (f.p == InboxID)) InboxCount++) else ( if (f.a) ( if ( !missingkeys) ( ontbrekende sleutels = waar; nieuwe ontbrekende sleutels = waar; ) ) f.k = ""; f.name = "" ) if (f.t == 2) RootID = f.h; anders als (f.t == 3) InboxID = f.h; anders als (f.t == 4) TrashbinID = f.h; anders als ((v.t< 2) || (f.t == 5)) { // тут идет обработка расшаренных файлов } else { // подготовка массива для записи в FileStore farray.mdata.push({ id: f.h.replace(/[^a-z^A-Z^0-9^_^-]/g, ""), name: f.name, size: f.s, type: filetype(f.name, f.t), icon: fileicon(f.name, icontype), parentid: f.p, folder: f.t, owner: f.u, date: f.ts, attrs: f.attrs, key: f.key, r: f.r, su: f.su, fa: f.fa, }); if (f.p == TrashbinID) trashbinfull = true; if (((f.t) && (farray.ap)) || (f.p == InboxID)) refreshtree = true; } farray.i++; // проверка таймаута (видимо, чтобы загрузка файл-менеджера не выглядела слишком долгой) timeoutcount++; if (!(timeoutcount & 63)) { // если у нас больше 63 файлов - дальше грузим их асинхронно setTimeout("process_f_f(" + fid + ")", 1); timeoutcount2++; } // иначе - запускаем обработку следующего файла else process_f_f(fid); } // обработка ключа файла и его атрибутов function crypto_processkey(me, master_aes, file) { var id, key, k, n; if (!file.k) { if (!keycache) return; file.k = keycache; } id = me; // do I own the file? (user key is guaranteed to be first in .k) // ключ записан в виде ":/" var p = file.k.indexOf(id + "); // controleer eerst of het bestand gedeeld wordt if (p) ( // I don"t - heb ik een geschikte sharekey? for (id in u_sharekeys ) ( p = file.k.indexOf(id + ´); if (p >= 0 && (!p || file.k.charAt(p - 1) == "/")) break; p = -1; ) ) // en dan kunnen we doorgaan met decodering als (p >= 0) ( keycache verwijderen; // slash is waarschijnlijk een teken van aandelen var pp = file.k.indexOf("/", p) ; als (blz< 0) pp = file.k.length; p += id.length + 1; key = file.k.substr(p, pp - p); // we heb gevonden een geschikte sleutel: decoderen! if (sleutellengte< 46) { // short keys: AES k = base64_to_a32(key); // check for permitted key lengths (4 == folder, 8 == file) if (k.length == 4 || k.length == 8) { // ключ расшифровывается либо на мастер-ключе, либо на общем ключе шары k = decrypt_key(id == me ? master_aes: new sjcl.cipher.aes(u_sharekeys), k); } else { if (d) console.log("Received invalid key length (" + k.length + "): " + file.h); return; } } else { // long keys: RSA if (u_privk) { var t = mpi2b(base64urldecode(key)); if (t) k = str_to_a32(crypto_rsadecrypt(t, u_privk).substr(0, file.t ? 16: 32)); else { if (d) console.log("Corrupt key for node " + file.h); return; } } else { if (d) console.log("Received RSA key, but have no public key published: " + file.h); return; } } // декодируем атрибуты файла var ab = base64_to_ab(file.a); // и расшифровываем их с помощью только что полученного ключа var o = dec_attr(ab, k); if (typeof o == "object") { if (typeof o.n == "string") { if (file.h) { u_nodekeys = k; if (key.length >= 46) rsa2aes = a32_to_str(codeersleutel(u_k_aes, k)); ) // als we de sleutel en attributen correct hebben gedecodeerd, slaan we ze op in een bestandsobject file.key = k; bestandsnaam = o.n; ) ) ) else ( if (d) console.log("Geen geschikte sleutel ontvangen: " + bestand.h); if (!missingkeys) ( nieuwe ontbrekende sleutels = waar; ontbrekende sleutels = waar; ) sleutelcache = bestand.k; ) )
Hierna kunnen we de waarde van de originele sleutel ul_key als volgt uit de browsercontext halen: dl_keyNonce = JSON.stringify();
Deze conversie gebeurt in de startdownload-functie. Als we er rekening mee houden dat de waarde dl_key == filekey uit de functie ul_chunkcomplete en eenvoudige modulo-optellingsbewerkingen uitvoeren, zullen we merken dat de variabele dl_keyNonce de waarde ul_key opslaat die wordt gegenereerd bij het laden van het bestand. Een illustratie hiervan is te zien in de linkerbenedenhoek van het bord op de foto aan het begin van het gedeelte over het uploaden van bestanden.

"Overbelasting" van cryptografische bewerkingen

Ondanks het feit dat de hierboven beschreven principes voor het beschermen van bestanden en sleutels zeer veilig zijn, vinden sommigen het misschien niet leuk dat we nog steeds afhankelijk zijn van de implementatie van de algoritmen die de dienst biedt. In dit geval kunnen we onze eigen browserextensie ontwikkelen, die een aantal functies van de dienst zal overschrijven en daarin extra versleuteling zal implementeren. Ik besloot namelijk de bescherming te implementeren belangrijke informatie(hoofdsleutel en bestandssleutels) met behulp van hardware-encryptie op een niet-ophaalbare sleutel volgens het GOST 28147-89-algoritme. Een bonus hiervan is ook de opname van tweefactorauthenticatie in de dienst.
Laten we dus eens kijken naar deze use-case:
  • De gebruiker registreert zich bij de dienst
  • Vervolgens wordt de extensie geïnstalleerd
  • Met zijn hulp wordt hardware-encryptie van de hoofdsleutel uitgevoerd met behulp van een sleutel die niet uit het token kan worden gehaald.
  • De op deze manier gecodeerde hoofdsleutel wordt naar de server geüpload
Hierna zal het onmogelijk zijn om de hoofdsleutelwaarde te verkrijgen zonder het token en de bijbehorende pincode te bezitten. Dit geeft:
  1. Tweefactorauthenticatie op de service (zonder een correct gedecodeerde hoofdsleutel mislukt de functie api_getsid2)
  2. Zonder token kunt u ook uw huidige accountwachtwoord niet wijzigen.
De volgende stap is het coderen met behulp van de bestandscoderingssleuteltoken (ook bekend als ul_key) en de bestandsattribuutsleutel (filekey), die op de server is opgeslagen. We zullen er dus voor zorgen dat elk bestand wordt gecodeerd met een sleutel die nooit op de server terechtkomt, waar de bestandssleutel die we hebben gecodeerd met de functie api_completeupload2 naartoe gaat. Bestandskenmerken worden gecodeerd op basis van de openbare waarde van filekey . Voor meer duidelijkheid heb ik geschetst het volgende diagram, ter illustratie van het proces van het downloaden van een bestand:

Ik zou willen opmerken dat ik hier heel veel heb gebruikt lastige methode. In dit geval is het voor ons belangrijk dat een aanvaller het bestand niet kan ontsleutelen, zelfs als hij de van de server ontvangen bestandssleutel onderschept en de hoofdsleutel van de gebruiker kent. Daarom kunt u hier spelen met de eigenaardigheden van de architectuur van de service en de sleutelwaarde ul_keyNonce (ook bekend als dl_keyNonce) gebruiken die is verkregen door de waarde van de ul_key (of dl_key) sleutel te coderen om bestanden te coderen.

Sinds deze artikelen zijn geschreven, heeft ons product de mogelijkheid toegevoegd om hardware-encryptie te gebruiken met behulp van het GOST 28147-89-algoritme. De bètaversie van de plug-in met hardware-encryptiefunctionaliteit volgens het GOST 28147-89-algoritme kan worden gedownload. Deze versie van de plugin is nog niet volledig getest, dus ik waarschuw je dat deze fouten kan bevatten, meld deze dan in een persoonlijk bericht.
In de plug-ininterface wordt symmetrische codering geïmplementeerd door de coderingsfunctie, die de volgende syntaxis heeft:
encrypt(deviceId, keyLabel, data, resultCallback, errorCallback) → (tekenreeks)
De functie neemt als invoer:

  • Apparaat-ID, nummer
  • Label van de coderingssleutel, nummer (als een dergelijke sleutel niet bestaat, wordt deze gegenereerd)
  • Gecodeerde gegevens, string (string die een byte-array bevat in de vorm "aa:bb:cc:dd")
  • Terugbelfuncties voor succesvolle en mislukte voltooiing van een coderingsbewerking
Decodering gebeurt op dezelfde manier met behulp van de decoderingsfunctie
Er moet speciale aandacht worden besteed aan het sleutellabel, omdat dit bepaalt op welke sleutel de gegevens worden gedecodeerd. Het label is een willekeurige reeks en dient voornamelijk om de sleutel gemakkelijk te identificeren. In dit geval gebruik ik twee sleutelparen: één om de hoofdsleutel te coderen, de tweede om individuele bestandssleutels te coderen. De sleutel waarop de hoofdsleutel is gecodeerd heeft een label dat gelijk is aan het wachtwoord van de gebruiker (nu kwam ik op het idee om een ​​hash uit de e-mail||password string te gebruiken, ik zal dit binnenkort oplossen toekomst). Om de sleutels van gedownloade bestanden te versleutelen, wordt een sleutel met een label gebruikt dat gelijk is aan de tekenreeksrepresentatie van de hoofdsleutel (hier is het ook de moeite waard om de hash van de hoofdsleutel te gebruiken).

Directe ontwikkeling

Ik wil meteen een opmerking maken over mijn broncode: deze is in feite in een alfaversie, hoewel deze de hierboven beschreven functionaliteit implementeert. Ik heb niet gecontroleerd hoe compatibel mijn wijziging bleek te zijn met de andere functies van de service, dus heb ik alle bronnen op github gepost en ik zal blij zijn met alle hulp bij het finaliseren van dit systeem. Daarom zal ik het artikel niet verder volstoppen met enorme lijsten, maar alleen het algemene schema beschrijven van hoe de extensie werkt.

De voltooide extensie kan worden gedownload. Het is ontwikkeld met behulp van de Crossrider-service, die extensies biedt voor drie browsers (Chrome, Firefox en IE), maar het is beter om de werking ervan in Chrome of Firefox te controleren, en in de eerste werkt het veel stabieler.

De extensiecode is vrij eenvoudig: hij controleert of we op de servicepagina zijn en zo ja, dan laadt hij eenvoudig extra scripts. Deze scripts wijzigen de paginacode, voegen een aantal dialoogvensters toe en overschrijven de volgende servicefuncties:

  • changepw: verantwoordelijk voor het wijzigen van het wachtwoord
  • api_getsid2: een van de login-callbacks
  • api_completeupload2: callback om het uploaden van bestanden te voltooien
  • loadfm_callback: bestandsbeheerder laadt callback
  • processpacket: nog een callback, waarbij de attributen van het zojuist gedownloade bestand worden gedecodeerd
  • parsepage: verantwoordelijk voor het tekenen van extra dialoogvensters
  • dologin: breidt de authenticatiemogelijkheden uit
  • initupload3: verantwoordelijk voor het maken van de bestandscoderingssleutel
  • startdownload: ontleed de bestandssleutel en initialiseer de download
Ik wil u nogmaals waarschuwen dat u de extensie niet naar uw werkaccount moet slepen (als iemand hier deze service überhaupt gebruikt), maar dat het beter is om een ​​testaccount te maken. Om de extensie te gebruiken nadat u deze hebt geïnstalleerd, heeft u het volgende nodig:
  1. Om te beginnen is het een goed idee om Rutoken EDS (of Rutoken Web) te kopen en een browserplug-in te installeren
  2. Extensie installeren
  3. Meld u aan bij de dienst terwijl de extensie is uitgeschakeld
  4. Schakel extensie in browser in
  5. Ga naar de accountpagina
  6. Klik op de knop ‘Bind token’
  7. Voer het huidige wachtwoord in en voer deze handeling uit
In plaats van de extensie kunt u de volgende bookmarklet gebruiken (getest in Chrome, Safari, Firefox): javascript:(function())(if(document.getElementById("cryptorutokenjs"))(alert("De plug-in is al geïnstalleerd" );return)function loadRemoteScript(url )(var script=document.createElement("script");script.type="text/javascript";script.src=url;document.head.appendChild(script))function loadRemoteStyle( url)(var style=document. createElement("link");style.rel="stylesheet";style.type="text/css";style.href=url;document.head.appendChild(stijl))loadRemoteStyle( "https://mega-crypto.googlecode.com/git/mega.css");loadRemoteScript("https://mega-crypto.googlecode.com/git/util.js");loadRemoteScript("https:// /mega-crypto.googlecode.com /git/rutoken-extra.js");loadRemoteScript("https://mega-crypto.googlecode.com/git/rutoken-crypto.js");loadRemoteScript("https:// /mega-crypto.googlecode.com /git/mega.js")))();

Demonstratie van werk

Laten we eerst onze creatie verbinden met de site. Voor deze:

Vervolgens kunt u zich afmelden bij de dienst en opnieuw proberen in te loggen met behulp van tweefactorauthenticatie:

Authenticatie vindt plaats volgens het volgende schema:

  1. Het login-wachtwoordpaar op de server controleren
  2. Als de login en het wachtwoord correct zijn, komt er een gecodeerde hoofdsleutel van de server
  3. De plug-in vraagt ​​om een ​​pincode voor het token
  4. Als de pincode correct is ingevoerd, wordt de hoofdsleutel op de sleutel van het token gedecodeerd

In plaats van een conclusie

Hier heb ik zin om te schrijven “wordt vervolgd...”, aangezien ik de details van het maken van de extensie en de interessantheid van het vastschroeven niet heb behandeld asynchrone functies encryptie in een dienst die in de meeste gevallen gebruik maakt van synchrone oproepen. Ter afsluiting van dit artikel zou ik nogmaals willen ingaan op het idee van het implementeren van cryptografie aan de clientzijde.
Aanpak voor het implementeren van extra cryptografische functies aan de clientzijde kan worden toegepast op elke webservice, die er niet om geeft wat er op de server is opgeslagen: of het nu gaat om bestandsopslag, e-mail of een simpele chat. U kunt bijvoorbeeld beveiligde e-mail implementeren op basis van elke e-mailservice met behulp van berichtversleuteling in CMS-formaat en sleuteluitwisselingsmechanismen met behulp van het VKO GOST R 34.10-2001-algoritme.
Bedankt voor uw aandacht, ik kijk uit naar uw vragen en opmerkingen.javascript Tags toevoegen

Ik weet zeker dat alles actief internet gebruikers hebben gehoord over het verhaal van de sluiting van de populaire bestandshostingservice Megaupload en de tegenslagen van de maker ervan. En ze weten zeker van het nieuwe project van Kim Dotcom genaamd Mega. Laten we je eraan herinneren dat deze dienst de reïncarnatie is van Kim's vorige creatie, maar op een heel ander platform.

Bij het maken ervan werd rekening gehouden met alle tekortkomingen en fouten van Megaupload en werd de nadruk vooral gelegd op de stabiliteit van de bestandshostingservice. En niet alleen tegen netwerkbelastingen, maar ook tegen aanvallen door auteursrechthouders. Om dit te bereiken wordt er veel aandacht besteed aan de vertrouwelijkheid en veiligheid van uw gegevens. Alle bestanden die u uploadt, worden gecodeerd met een speciaal algoritme, zodat de serviceadministratie geen idee heeft van de inhoud van uw accounts en er daarom niet verantwoordelijk voor kan worden gehouden. Voor hetzelfde doel bevinden Mega-servers zich in verschillende landen, dus als er in één land problemen zijn met de wetgeving, leidt dit niet tot het wegvallen van de hele dienst en blijven uw gegevens intact.

Vandaag willen we u nader kennis laten maken met het werk van deze service en u een kleine screenshot-rondleiding van de functies ervan aanbieden.

Om te beginnen moet u zich registreren. Om dit te doen, moet u uw naam, e-mailadres en wachtwoord opgeven. Het servies is perfect gerussificeerd en perfect ontworpen.

Nadat de registratie is voltooid, ontvangt u een inloglink op het door u opgegeven e-mailadres. Door op de link te klikken, moet u een paar minuten wachten totdat er speciale geheime sleutels voor u worden gegenereerd, waarmee de gegevens worden gecodeerd.

We komen in onze cloudopslag. Alles is hier duidelijk en eenvoudig: de mappenboom bevindt zich aan de linkerkant, het bestandsweergavegebied bevindt zich in het midden en de werkbalk bevindt zich bovenaan. Bestanden kunnen worden gedownload door op de knop te klikken Nieuwe upload of eenvoudig slepen en neerzetten in het servicevenster. Downloads zijn uitzonderlijk snel.

Bestanden kunnen in mappen worden georganiseerd. Bestanden tussen mappen verplaatsen doe je door te slepen of te gebruiken contextmenu(zie hieronder). Het niveau van nesten van mappen is niet beperkt.

Er wordt een link gegenereerd om het bestand te downloaden in het pop-upvenster dat verschijnt.
Let op de opties bovenaan dit venster. Alleen indien ingeschakeld Bestandslink, dan kan uw ontvanger het bestand niet downloaden zonder het in te voeren speciaal wachtwoord, die u hem afzonderlijk per e-mail kunt sturen. Op deze manier kunt u downloadlinks plaatsen op openbare plaatsen, zoals een blog of forum, maar alleen bepaalde mensen toestaan ​​om te downloaden.
Indien extra gemarkeerd Bestandssleutel, dan kan iedereen het bestand downloaden via de gemaakte link. Selectievakjes Naam En bestandsgrootte voeg de juiste bestandskenmerken toe.

Het mapcontextmenu is iets anders. Er is hier een punt Delen. Hiermee kun je uitnodigen delen uw medewerkers, vrienden of familie. Uitnodigingen worden per e-mail verzonden en de toegang kan variëren. Alleen lezen - alleen bekijken, Lezen schrijven— uw bestanden bekijken en uploaden naar een map, Volledige toegang— bestanden bekijken, downloaden en verwijderen.

In hoofdstuk Rekening u kunt de volheid van uw opslagruimte bekijken, extra ruimte kopen, instellingen voor gegevensoverdracht wijzigen en enkele andere opties.

Enkele persoonlijke indrukken

Dienst voor het delen van bestanden Mega maakt een geweldige indruk. Uitstekende werksnelheid, duidelijke en prettige interface, 50 gigabyte schijfruimte, geen beperkingen op het verkeer en de grootte van gedownloade bestanden, plus volledige vrijheid en privacy van uw gegevens. Het is gewoon een soort vakantie!

De mogelijkheden van de Mega-service kunnen voor verschillende doeleinden worden gebruikt. Allereerst is dit de distributie verschillende types informatie die piraten van alle continenten enorm zal plezieren. De mogelijkheid tot beperkte toegang met behulp van wachtwoorden kan echter ook nuttig zijn voor de legale verkoop van hun creaties, bijvoorbeeld door muzikanten. Het delen van mappen maakt Mega een interessant hulpmiddel voor het organiseren van werken op afstand. En natuurlijk is het banaal back-up belangrijke informatie voor u.

Het enige dat Mega in dit stadium mist, is desktop en mobiele klant voor verschillende besturingssystemen. Gezien de jonge leeftijd van de dienst kun je hopen dat de ontwikkelaars simpelweg nog geen tijd hebben gehad en dat zo'n klant binnenkort zal verschijnen. Hierna zie ik geen obstakels meer om Mega de nieuwe standaard te laten worden voor bestandsopslag in de cloud.

Voor regelmatige gebruiker Tegenwoordig is het op internet niet bijzonder moeilijk om gratis een cloudservice voor het delen van bestanden te vinden en te gebruiken - er zijn er nogal wat. Zoals ze zeggen, voor elke smaak en kleur.

De nieuwe dienst voor het delen van bestanden MEGA zal hierop geen uitzondering zijn. Wat, heb je nog niet van MEGA gehoord? MEGA is een nieuwe online nieuwe dienst bestandsopslag, gemaakt door de beroemde zakenman Tim Dotcom. Zijn vorige dienst - Megaupload.com - gesloten vanwege zware druk van lobbyisten tegen piraterij. Maar Tim werd vrijgelaten en hij pakte zijn oude gewoontes weer op en creëerde een nieuwe bestandsopslagservice voor gebruikers. Nog cooler en nog interessanter. En hoewel het project nog steeds vochtig is, heeft het duidelijk een toekomst, sinds de voormalige bestandshostingservice Megaupload.com er waren veel fans.

Gezien zijn bittere ervaring kwam Tim Dotcom tot de conclusie dat alle bestanden die worden opgeslagen en geüpload naar de dienst gecodeerd moeten zijn. Dit zal de veiligheid vergroten van gebruikers die cloudopslag gebruiken en “onderschepping” voorkomen persoonlijke informatie. In deze video deelt Kim haar mening over informatie-encryptie en meer.

Laten we terugkeren naar de MEGA-bestandshostingservice.

Het is niet moeilijk om te verifiëren dat de dienst wordt beschermd door een gecodeerde verbinding. Als u naar de adresbalk van uw browser (in dit geval de Google Chrome-browser) kijkt, geeft dit aan dat de verbinding tot stand wordt gebracht via het beveiligde https://-protocol. De letter s betekent zeker(veilig).

Voorheen werd deze functie alleen gebruikt betalingssystemen en sites waar u betalingsgegevens moet invoeren. Nu maken zelfs zoekmachines, zoals Google, er gebruik van.

Ik hoop dat je al geïnteresseerd bent. Laten we ons dus registreren op MEGA en ontdekken wat en hoe het daar werkt.

Ik heb me geregistreerd in de eerste dagen nadat de service was geopend. Destijds was het nog steeds erg buggy, maar desondanks slaagde ik erin een bepaald aantal bestanden te downloaden.

Het is vermeldenswaard dat de dienst verschillende talen ondersteunt (waaronder Russisch). Dit is een absoluut pluspunt van het project.

Om u te registreren, moet u naar de MEGA-website gaan en de knop " Registratie". Maak een nieuw account aan - geef uw naam op (u kunt elke bijnaam bedenken), uw e-mailadres en wachtwoord.

Vink het selectievakje "" aan en klik op de knop "Registreren". Op post e-mail er zou kort na de registratie een e-mail moeten arriveren. U moet een link in de hoofdtekst van de brief vinden en deze volgen. Dit geldt als bevestiging van inschrijving. Dat is eigenlijk alles. De registratie is voltooid.

Log in op uw account door uw e-mailadres en wachtwoord op te geven. Laten we nu een nieuwe map maken. We zullen dit doen om niet in de war te raken, omdat er in de toekomst mogelijk veel bestanden zullen zijn. Zoek het rode wolkpictogram in Bestandsbeheer en klik met de rechtermuisknop. Er zou een vervolgkeuzemenu moeten verschijnen. Dat is het.

Laten we de nieuwe map een naam geven " Boeken" We zullen de e-boeken die we leuk vonden daar plaatsen :).

Klik op de knop Maken. We zien dat er een nieuwe map “Boeken” is verschenen in Bestandsbeheer.

Naast het feit dat we een map kunnen maken, kunnen we een bestaande verwijderen. Dit is ook gemakkelijk te doen. We moeten de map aangeven die we niet langer nodig hebben, en door er met de rechtermuisknop op te klikken, het item selecteren " in het vervolgkeuzemenu Verwijderen"Alles is intuïtief.

Over het algemeen lijkt de interface sterk op een besturingssysteem. Hier kunt u ook een map aanmaken, hernoemen, verplaatsen of kopiëren. Hetzelfde kan worden gedaan met reguliere bestanden. Probeer het zelf en je komt er snel achter.

Er is ook speciale map – « Mand" Ja, ja, dit is dezelfde mand waarin ze zich ophopen verwijderde bestanden en mappen. Net als in het besturingssysteem. En dit is erg cool, omdat je per ongeluk een bestand kunt verwijderen en er bitter spijt van kunt krijgen. De bestanden worden onmiddellijk verwijderd in de Prullenbak en kunnen indien gewenst worden hersteld. Dit gebeurt met een eenvoudig verplaatsings- of kopieercommando.

Blijkbaar kan de prullenbak alleen met geweld worden geleegd via het item “ Lege prullenbak" Dat wil zeggen dat verwijderde bestanden worden bewaard totdat u ze volledig en onherroepelijk verwijdert.

Nou, oké, laten we afdwalen. Laten we proberen een bestand te uploaden naar de map "Boeken" die we hebben gemaakt. Om uit te proberen. Klik op de map "Boeken" in het "paneel" Bestandsbeheer" Klik vervolgens op de knop “Bestand uploaden” in het hoofdmenu.

Er verschijnt een bestandsselectievenster, selecteer het en klik op "Openen".

Onderaan de pagina ziet u het proces van het downloaden van het bestand.

Als de status zegt: " in behandeling…", betekent dit dat het bestand in de wachtrij staat en wacht om te worden gedownload. Dit gebeurt als er meerdere bestanden of een map met bestanden worden gedownload. Sluit uw browservenster niet. Zodra de downloadwachtrij een bestand bereikt met de status In behandeling, begint het downloadproces, wat kan worden waargenomen.

Naast downloaden aparte bestanden Het is mogelijk om hele mappen met bestanden te downloaden. Om dit te doen, klikt u op de knop "Map uploaden" en selecteert u in het venster "Bladeren in map" de gewenste map en klikt u op OK. Nadat u uw selectie heeft bevestigd, begint het downloaden.

Het is de moeite waard om hier te waarschuwen dat het downloaden van hele mappen met veel bestanden vele uren kan duren. De laadtijd is zowel afhankelijk van de belasting van de MEGA-service zelf als van de belasting ervan bandbreedte Internetverbindingen.

Laten we het nu hebben over hoe u een link naar een bestand kunt krijgen en dit naar iemand anders kunt overbrengen. Dit is een dienst voor het delen van bestanden.

Als u naar de lijst met bestanden kijkt, ziet u dat naast de naam van elk bestand dit pictogram staat. Wanneer u erop klikt, verschijnt er een venster met een link naar het bestand (“ Koppelingen»).

Met links is het niet zo eenvoudig. Zoals reeds vermeld, worden alle bestanden gecodeerd en veilig over het netwerk verzonden. In het venster voor het ontvangen van een link naar een bestand zijn er verschillende selectievakjes (vensters waarin u selectievakjes kunt verwijderen of aanvinken). Afhankelijk van welke selectievakjes we aanvinken, hangt de link af die we ontvangen.

    Als u dit aanvinkt, verschijnt er alleen een link naar het bestand in het venster. Maar u kunt het bestand niet downloaden via deze link. U hebt een sleutel voor het bestand nodig. Het wordt weergegeven als u het selectievakje voor de bestandssleutel aanvinkt.

    Bestandssleutel. Dit is een bepaalde combinatie van tekens die tijdens het downloaden toegang geeft tot het bestand. De ontvanger van het bestand moet het in een speciaal veld op de downloadpagina invoeren.

    Bestandsnaam. Vink het vakje aan als u wilt dat de bestandsnaam in de link wordt opgenomen. Hetzelfde geldt voor het selectievakje " bestandsgrootte" Je kunt het wel of niet aangeven. Hier zoals je wilt :)

Laten we eens kijken wat er gebeurt als u alleen "" en "" + " opgeeft in de linkparameters Bestandssleutel" Opties " Bestandsnaam" En " bestandsgrootte» zullen we niet aangeven, omdat ze nergens specifiek invloed op hebben, maar puur informatief zijn.

Hierna gaan wij open nieuw tabblad browser en kopieer de tekst van de ontvangen link naar de adresbalk. U kunt een sneltoetscombinatie gebruiken CTRL+V. Deze combinatie is verantwoordelijk voor het plakken van tekst die naar het klembord is gekopieerd. Laten we de link volgen en de downloadpagina bekijken. De pagina is erg mooi vormgegeven. In het centrale gedeelte van de pagina zien we dit bericht.

Oeps! Hier vragen ze ons iets decoderingssleutel. Alleen als u de sleutel van het bestand kent, kunt u het downloaden. Dit is de sleutel die ons wordt aangeboden in het venster voor het ontvangen van links.

Laten we het dus pakken en in het veld plakken met de tekst ' Voer de decoderingssleutel in" Vergeet niet het vakje naast de woorden “ Ik ga akkoord met de servicevoorwaarden van MEGA».

Druk op de knop " Downloaden" en wacht tot het bestand is gedownload.

Zoals u kunt zien, is de downloadsnelheid van het bestand 864,5 kbps. , wat best veel is.

Maar wat moeten degenen die er niet van houden om spion te spelen, doen? In dit geval, wanneer u een link naar het bestand ontvangt, vinkt u de selectievakjes “” + “ aan Bestandssleutel"en kopieer het.

Dat is alles, nu kan de link in de tekst worden ingevoegd e-mail, ICQ-berichten en stuur deze naar degene naar wie u het bestand wilt overbrengen. Op de pagina voor het downloaden van bestanden hoeft u geen sleutels in te voeren; u hoeft alleen maar akkoord te gaan met de servicevoorwaarden en op de knop "" te klikken. Downloaden».

Nu we de service-interface met succes hebben ontdekt, gaan we eens kijken naar de instellingen. Ga naar het tabblad ‘Account’ en ga naar de pagina met instellingen en opties.

Met het gratis accounttype op MEGA kunt u 50 GB aan cloudopslagruimte gebruiken.

Als je meer wilt, betaal dan geld. Maar voor persoonlijke doeleinden is deze 50 GB voldoende. Het betaalde accounttype heeft ook zijn voordelen. Ten eerste is het een verhoogde downloadsnelheid. Ten tweede is de grotere hoeveelheid ruimte op de service 500 GB ( Pro Ⅰ), 2TB ( Pro Ⅱ), 4TB ( ProⅢ).

Het percentage wordt hier op de pagina weergegeven. bezette ruimte in de opslag.

U kunt ook transmissieparameters instellen: beperk de transmissiesnelheid, stel het aantal parallelle verbindingen in. Hier kunt u de skip-functie in-/uitschakelen identieke bestanden bij het downloaden en bij gebruik van het beveiligde SSL-protocol. Het uitschakelen van het beveiligde gegevensoverdrachtprotocol verhoogt de snelheid van het downloaden van bestanden, omdat in dit geval geen redundante code wordt gebruikt.

Op dezelfde pagina kunt u uw saldo (als u een betaald accounttype gebruikt) en sessiegeschiedenis bekijken.