Облачный сервис Mega. Облачное хранилище MEGA

Для обычного пользователя интернета в настоящее время не составляет особого труда найти и бесплатно использовать файлообменный облачный сервис - их достаточно много. Как говорится, на любой вкус и цвет.

Не будет исключением и новый файлообменный сервис MEGA . Как, вы ещё не слышали о MEGA ? MEGA - это новый онлайновый сервис хранения файлов, созданный известным бизнесменом Тимом Доткомом. Прежний его сервис - Megaupload.com - закрыли из-за сурового прессинга антипиратских лоббистов. Но, Тима отпустили на волю, и он взялся за старое и создал новый сервис по хранению файлов для пользователей. Ещё круче и ещё интереснее. И хотя проект пока что сыроват, у него явно есть будущее, так как у прежнего файлообменника Megaupload.com было немало поклонников.

Учитывая свой горький опыт, Тим Дотком пришёл к выводу, что все файлы, которые хранятся и закачиваются на сервис нужно шифровать. Это повысит безопасность использования пользователями облачного хранилища и пресечёт от «перехвата» личной информации. Вот в этом видео Ким делится своим мнением по поводу шифрования информации и не только.

Вернёмся к файлообменнику MEGA.

О том, что сервис защищён шифрованным соединением не трудно убедиться. Если взглянуть на адресную строку браузера (в данном случае браузера Google Chrome), то там указано, что соединение установлено по защищённому протоколу https:// . Буква s - означает secure (безопасный).

Раньше такую фишку использовали только платёжные системы и сайты, на которых нужно вводить платёжные данные. Теперь же его используют даже поисковики, например, Google.

Надеюсь, вам уже стало интересно. Так давайте зарегистрируемся на MEGA и узнаем что, да как там работает.

Я регистрировался в первые дни после открытия сервиса. Тогда он ещё сильно глючил, но, не смотря на это, мне удалось закачать некоторое количество файлов.

Стоит отметить тот факт, что сервис поддерживает несколько языков (в том числе и русский). Это несомненный плюс проекта.

Для того чтобы зарегистрироваться нужно зайти на сайт MEGA и найти кнопку "Регистрация ". Создаём новый аккаунт - указываем имя (можно придумать любой никнейм), свой e-mail и пароль.

Ставим галку в чекбоксе «» и жмём кнопу «Зарегистрироваться». На почтовый e-mail адрес вскоре после регистрации должно прийти письмо. В тексте письма нужно найти ссылку и перейти по ней. Это будет подтверждением регистрации. Вот, собственно, и всё. Регистрация завершена.

Заходим в аккаунт указав свай e-mail и пароль. Теперь создадим новую папку. Сделаем это для того, чтобы не запутаться, ведь в будущем файлов может быть много. Находим иконку красного облака в менеджере файлов и щёлкаем правой кнопкой мыши. Должно появиться выпадающее меню. Вот такое.

Назовём новую папку «Книги ». Будем складывать туда электронные книги, которые нам понравились:).

Жмём кнопку создать. Наблюдаем, что в менеджере файлов появилась новая папка "Книги".

Кроме того, что мы можем создать папку, мы можем удалить уже существующую. Делается это также просто. Нужно указать ту папку, которая нам больше не нужна, и, щёлкнув правой кнопкой мыши по ней выбрать в выпадающем меню пункт "Удалить ". Всё интуитивно понятно.

Вообще интерфейс очень напоминает операционную систему. Здесь также можно создать папку, переименовать её, переместить или копировать. То же самое можно проделывать и с обычными файлами. Попробуйте сами и вы быстро разберётесь.

Также есть специальная папка – «Корзина ». Да, да это та самая корзина, в которой скапливаются удалённые файлы и папки. Точно также как и в операционной системе. И это очень здорово, так как можно удалить файл по ошибке и горько пожалеть об этом. Тут же файлы удаляются сначала в «Корзину» и их можно восстановить при желании. Это делается простой командой переместить или копировать.

Судя по всему, корзина чистится только принудительно через пункт «Очистить корзину ». То есть удалённые файлы хранятся до тех пор, пока вы их сами не удалите полностью и безвозвратно.

Ну, да ладно, отвлеклись. Давайте попробуем закачать в созданную нами папку «Книги» какой-нибудь файл. Для пробы. Щёлкаем по папке «Книги» в панели «Менеджер файлов ». Далее жмём на кнопку «Закачать файл» что расположена в верхнем меню.

Появляется окно выбора файла, выбираем, жмём «Открыть».

Внизу страницы можно увидеть процесс загрузки файла.

Если в статусе указано «pending… », то это значит, что файл поставлен в очередь и ожидает загрузки. Такое бывает, если загружаются несколько файлов или папка с файлами. Не закрывайте окно браузера. Как только очередь загрузки дойдёт до файла со статусом ожидания («pending»), то начнётся процесс загрузки, который можно будет наблюдать.

Кроме загрузки отдельных файлов предусмотрена загрузка целых папок с файлами. Для этого жмём кнопку «Закачать папку» и в окне «Обзор папок» выбираем нужную, жмём ОК. После подтверждения выбора начнётся загрузка.

Тут стоит предупредить о том, что загрузка целых папок с множеством файлов может затянуться по времени на долгие часы. Время загрузки зависит как от нагрузки на сам сервис MEGA, так и от пропускной способности интернет-соединения.

Теперь поговорим о том, как можно получить ссылку на файл и передать её другому. Это же файлообменный сервис.

Если взглянуть на список файлов, то можно увидеть, что рядом с именем каждого файла есть вот такой значок. При нажатии на него появляется окно получения ссылки на файл («Ссылки »).

Со ссылками не так всё просто. Как уже говорилось, все файлы шифруются и передаются по сети защищёнными. В окне получения ссылки на файл есть несколько чекбоксов (окошки, где убирают или ставят галочки). В зависимости от того, какие чекбоксы мы отметим, будет зависеть то, какую ссылку мы получим.

    Если его отметить, то в окне появится только ссылка на файл. Но по этой ссылке файл не скачать. Нужен ключ к файлу. Он отобразится если отметить чекбокс ключ файла.

    Ключ файла . Это некая комбинация символов, которые дают доступ к файлу при скачивании. Его нужно будет ввести получателю файла в специальное поле на странице скачивания.

    Имя файла . Поставьте галочку в нём, если хотите, чтобы в ссылке было указано имя файла. То же самое касается и чекбокса «Размер файла ». Можно указывать, а можно и нет. Тут как изволите:)

Давайте посмотрим, что будет, если указать в параметрах ссылки только «» и «» + «Ключ файла ». Параметры «Имя файла » и «Размер файла » указывать не будем, так как они особо ни на что не влияют, а служат чисто информативными.

Далее откроем новую вкладку браузера и в адресную строку скопируем текст полученной ссылки. При этом можно использовать комбинацию горячих клавиш CTRL+V . Эта комбинация отвечает за вставку скопированного в буфер обмена текста. Перейдём по ссылке и увидим страницу на скачивание. Страничка очень красиво оформлена. В центральной области страницы увидим вот такое сообщение.

Опа! Тут с нас спрашивают какой-то decryption key . Только зная ключ к файлу его можно скачать. Вот этот ключ нам и предлагается получить в окне получения ссылок.

Итак, получим его и вставим в поле с надписью «Enter decryption key ». Не забываем поставить галочку в боксе рядом с надписью «Я согласен с условиями предоставления услуг MEGA ».

Жмём кнопку "Скачать " и ждём когда скачается файл.

Как видим, скорость загрузки файла составляет 864,5 кбит/сек. , что очень даже немало.

А что же делать тем, кто не любит играть в шпионов? В таком случае при получении ссылки на файл, ставим галочки в чекбоксах «» + «Ключ файла » и копируем её.

Всё, теперь ссылку можно вставить в текст электронного письма, сообщения ICQ и отправить тому, кому вы хотите передать файл. На странице загрузки файла никаких ключей при этом вводить не понадобится, достаточно только согласится с условиями предоставления услуг, и щёлкнуть по кнопке «Скачать ».

Теперь, когда с интерфейсом сервиса мы успешно разобрались, давайте заглянем в настройки. Переходим на вкладку «Аккаунт» и попадаем на страницу настроек и параметров.

Бесплатный тип аккаунта на MEGA позволяет использовать 50 Гбайт места в облачном хранилище.

Если хотите больше – платите денежку. Но, для личных целей вполне достаточно и этих 50 Гбайт. У платного типа аккаунта есть и свои плюсы. Во-первых, это увеличенная скорость загрузки. Во-вторых – увеличенный объём места на сервисе 500 Гбайт (Pro Ⅰ ), 2 Тбайт (Pro Ⅱ ), 4 Тбайт (Pro Ⅲ ).

Здесь же на странице показан процент занятого места в хранилище.

Также можно задать параметры передачи: ограничить скорость передачи, выставить количество параллельных соединений. Здесь же можно включить / выключить функцию пропуска одинаковых файлов при загрузке, а также использование защищённого протокола SSL . Отключение защищённого протокола передачи данных увеличивает скорость загрузки файлов, так как в этом случае не используется избыточный код.

На этой же странице можно посмотреть баланс (если используется платный тип аккаунта) и историю сессий.

После запуска в какой-то мере скандального сервиса MEGA разговоры о его защищенности немного побурлили и затихли. На сегодняшний день сервис живет своей жизнью и его никто даже не поломал. Из всех разговоров почему-то был упущен термин «User Controlled Encryption» (UCE, или Контролируемая пользователем криптография), которой кичится MEGA. Под словом «упущен» я подразумеваю тот факт, что мы не рассмотрели все возможности, которые дает нам криптографический движок, выполняющийся в JavaScript на стороне клиента.

Конечно, сам сервис MEGA под этим подразумевает всего лишь то, что ключи шифрования не хранятся на сервере, а вся их криптография выполняется в контексте браузера. При этом после запуска сервиса было много разговоров о том, что в нем используются нестойкие криптографические алгоритмы и что вообще все плохо и мы все умрем, а наши файлы прочитает ФСБ. Это подтолкнуло меня на мысль расширить понятие «UCE» и действительно взять криптографию под свой контроль, а именно - заменить или дополнить некоторые механизмы обеспечения безопасности сервиса.

В этой статье я частично разложу по полочкам магию, которая происходит в двух мегабайтах JavaScript-кода MEGA и покажу, как можно переопределить некоторые методы, чтобы перестать волноваться и полюбить криптографию. В результате мы получим сервис облачного хранения файлов с двухфакторной аутентификацией и аппаратным шифрованием критически важной информации.

MEGA, UCE и все-все-все

Итак, начнем с того, что рассмотрим технологии, на которых построена клиентская часть сервиса, как происходит регистрация новых пользователей, аутентификация зарегистрированных пользователей, смена пароля и загрузка/скачивание файлов.

JavaScript

Как вам уже может быть известно, вся клиентская часть сервиса основана на JavaScript, в коде главной страницы прописаны контрольные суммы SHA-256 для всех скриптов и страниц, которые загружаются браузером. Сама загрузка происходит следующим образом: у всех файлов проверяются контрольные суммы, после чего они объединяются в один BLOB, который отдается браузеру. По исходному коду js-файлов видно, что их писали разные люди и порой встречаются забавные перлы, как например последствия копипаста, бессмысленные условия и просто странные переменные.

В процессе изучения исходного кода сайта я также заметил, что он довольно активно обновляется, разработчики исправляют мелкие ошибки и оптимизируют уже написанный код, что не может не радовать. Сам код написан весьма прямолинейно и без излишней накрутки в виде прототипов: сайт обходится тремя сотнями глобальных переменных и более чем 8000 функций. Разбираться в архитектуре сайта и менять его код было весьма просто.

Из сторонних фреймворков MEGA использует jQuery (без него сейчас никуда), Ext JS и SJCL . Последний как раз реализует криптографическое ядро с AES-шифрованием. SJCL также обуславливает интересный формат хранения ключей и прочих байт-массивов: вместо того, чтобы просто гонять байты в обычном массиве, они «сжимаются» в формат, который именуется a32. Его суть в том, что содержимое любого массива байт пакуется в 32-битные числа и записывается в массив меньшей длины. То есть, каждые 4 байта массива преобразуются в один банальный int. В коде сайта есть функции, которые выполняют всевозможные преобразования над импровизированным множеством {a32 array, string, base64 string}.

Ключевая информация

Прежде, чем перейти к описанию процессов регистрации и аутентификации, стоит рассмотреть информацию, которая подлежит зашифрованию, а именно:
  • Мастер-ключ учетной записи , который создается случайным образом в момент регистрации пользователя и имеет длину в 128 бит. Да и в принципе, длина всех ключей, используемых для симметричного шифрования, равна 128 бит.
  • Закрытый ключ RSA : создается в момент регистрации на основе движений мыши и ввода с клавиатуры. В данной статье я не буду акцентировать внимание на ассиметричной криптографии, поскольку она используется для общего доступа к загруженным файлам, а у меня стояла задача изменить процесс аутентификации и шифрования данных пользователя.
  • Индивидуальные ключи файлов и сами файлы , загружаемые на сервис. Ключи создаются случайным образом при загрузке файла, для зашифрования данных файла используется сам этот ключ, а для зашифрования атрибутов - ключ, созданный на основе индивидуального ключа файла и его контрольной суммы.

Ближе к коду

Сейчас я предлагаю разобрать процессы регистрации и аутентификации, посмотреть, как создается мастер-ключ и как производится его зашифрование.
Я тут попытался изобразить на бумажке эти процессы и дабы дать вам понять всю суть безумия, даже сделал вот такую фотку:

Регистрация нового пользователя

Сам по себе процесс регистрации довольно запутанный, после заполнения пользователем анкеты вызывается могучая кучка функций, но нас интересует функция api_createuser:

// создание нового пользователя и его мастер-ключа function api_createuser(ctx, invitecode, invitename, uh) { var i; var ssc = Array(4); // session self challenge, will be used to verify password 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(); // генерирование случайного мастер-ключа u_k for (i = 4; i--;) ssc[i] = rand(0x100000000); // генерирование случайной аутентификационной последовательности if (d) console.log("api_createuser - masterkey: " + u_k + " passwordkey: " + ctx.passwordkey); // зашифрование мастер-ключа на текущем пароле и отправка его на сервер (поле k) // поле ts представляет собой конкатенацию ssc с ее зашифрованным значением req = { a: "up", k: a32_to_base64(encrypt_key(new sjcl.cipher.aes(ctx.passwordkey), u_k)), ts: base64urlencode(a32_to_str(ssc) + a32_to_str(encrypt_key(new sjcl.cipher.aes(u_k), ssc))) }; if (invitecode) { req.uh = uh; req.ic = invitecode; req.name = invitename; } if (d) console.log("Storing key: " + req.k); api_req(, ctx); }
В этой функции нас интересуют следующие вещи:

  • u_k - сам мастер-ключ, глобальная переменная. Массив из 4х 32-битных чисел, который создается функцией api_create_uk
  • ssc - просто случайный массив, который зашифровывается на мастер-ключе, конкатенируется со своим открытым значением и отправляется на сервер. Позже он будет использован для проверки корректности мастер-ключа при аутентификации
  • sjcl - криптографическая библиотека, реализующая AES
  • rand() - местная реализация генератора псевдослучайных чисел, основанная на RC4
  • encrypt_key() - функция-краеугольный камень симметричной криптографии сервиса. Принимает инициализированный ключом объект sjcl и массив, который надо зашифровать. Код функции приведен ниже и, надеюсь, не нуждается в пояснениях.
// encrypt/decrypt 4- or 8-element 32-bit integer array function encrypt_key(cipher, a) { if (a.length == 4) return cipher.encrypt(a); var x = ; for (var i = 0; i < a.length; i += 4) x = x.concat(cipher.encrypt(, a, a, a])); return x; }
В итоге после регистрации на сервер отправляются:
  • Мастер-ключ, зашифрованный на ключе, выведенном из пароля учетной записи
  • Строка вида ssc||encrypt_AES-128(u_k, ssc)

Вход пользователя в систему

Теперь можно плавно перейти к процессу аутентификации. Вкратце оно производится так:
  1. Пользователь вводит логин/пароль
  2. Если первый этап аутентификации пройден, то с сервера приходит зашифрованный мастер-ключ и аутентификационная последовательность (ssc), созданная при регистрации
  3. Производится расшифрование мастер-ключа на введенном пользователем пароле
  4. На мастер-ключе расшифровывается аутентификационная последовательность и сравнивается со своим открытым значением - таким образом проверяется корректность мастер-ключа и пароля.
За все вышеописанное отвечает callback-функция api_getsid2:

// расшифрование мастер-ключа после входа пользователя в систему function api_getsid2(res, ctx) { var t, k; var r = false; if (typeof res == "object") { // инициализируем sjcl-aes текущим паролем учетки var aes = new sjcl.cipher.aes(ctx.passwordkey); // если нам в ответе сервера пришел мастер-ключ... if (typeof res.k == "string") { k = base64_to_a32(res.k); if (k.length == 4) { // ... то расшифровываем его k = decrypt_key(aes, k); // и пере-инициализируем sjcl-aes, используя мастер-ключ aes = new sjcl.cipher.aes(k); // если нам пришла ssc из процесса регистрации if (typeof res.tsid == "string") { t = base64urldecode(res.tsid); // зашифровываем первую половину строки и сравниваем со значением с сервера // если они совпали - значит, все явки и пароли сошлись и можно впустить юзера if (a32_to_str(encrypt_key(aes, str_to_a32(t.substr(0, 16)))) == t.substr(-16)) r = ; } // ниже разбирается закрытый ключ RSA-пары, нам это пока не интересно else 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); // decompose private key for (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] == "number") break; privk = privk.substr(l); } // check format if (i == 4 && privk.length < 16) { // TODO: check remaining padding for added early wrong password detection likelihood r = ; } } } } } ctx.result(ctx, r); }
Как бонус к регистрации/аутентификации можно взглянуть на процесс смены пароля.

// смена пароля пользователя function 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["email"].toLowerCase(), pw_aes) }], ctx); }
Код этой функции говорит сам за себя: мы зашифровываем мастер-ключ на двух ключах, полученных из старого и нового паролей, а затем отправляем эти значения на сервер. Если текущий пароль подошел, то он заменяется на новый. Тут я больше хотел обратить внимание на функцию prepare_key_pw , которая неявно присутствовала во всех предыдущих операциях. Ее задача - преобразовать строковый пароль в a32-массив, а потом выполнить операцию деривации ключа следующим образом:

// convert user-supplied password array function 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; }
Эта функция вызвала много нареканий, поскольку основана на доморощенном алгоритме. За время написания статьи создатели сервиса успели немного поменять ее код, но существенных изменений я тут не заметил. Ее суть состоит в том, что переданный пароль зашифровывается 65536 раз на константном ключе для того, чтобы получить неотличимый от случайного ключ. Почему создатели сервиса не воспользовались существующими алгоритмами (например, PBKDF2), остается загадкой.

Загрузка и зашифрование файлов

Вкратце весь этот процесс можно представить вот так:

Предупреждаю, долгое вникание в эту картинку опасно для мозга, поэтому ниже я расскажу, как же все это происходит.

Как я уже говорил, при загрузке для каждого файла создается свой случайный ключ-массив из 6ти 32-битных чисел. Первые четыре элемента этого массива используются для зашифрования содержимого файла, а два последних - как начальные значения счетчика, с помощью которого вычисляется контрольная сумма файла. Этот массив хранится в глобальной переменной ul_key . Его же содержимое заносится в JSON-сериализированную строку ul_KeyNonce .

Само за(рас)шифрование происходит с помощью Web Worker (если браузер поддерживает эту технологию) или просто внутри основного кода страницы. Когда файл становится готов к отправке, для зашифрования его атрибутов (на данный момент под атрибутами подразумевается только имя файла) создается новый ключ filekey , основанный на ul_key и контрольной сумме файла. Этот ключ затем зашифровывается на мастер-ключе и отправляется на сервер вместе с атрибутами файла. За все эти действия отвечают функции initupload3 и api_completeupload2 . Создание ключа filekey происходит в функции ul_chunkcomplete , ниже я приведу ее часть.

// начало загрузки файла: создание его индивидуального ключа и инициализация механизма шифрования function initupload3() { // ... вырезано =) // создание случайного индивидуального ключа файла // ul_key используется в коде страницы, // ul_keyNonce передавается в Web Worker и используется там // для зашифрования файла и вычисления его контрольной суммы ul_key = Array(6); for (i = 6; i--;) ul_key[i] = rand(0x100000000); ul_keyNonce = JSON.stringify(ul_key); ul_macs = ; // ... дальше идет обработка очереди загрузки, она не несет интереса... // инициализация sjcl-aes для файла на основе ul_key ul_aes = new sjcl.cipher.aes(); // ... // запуск процесса загрузки файла: // чтение его с диска, зашифрование и отправка onUploadStart(ul_queue_num); ul_dispatch_chain(); } // создание ключа для зашифрования атрибутов файла function ul_chunkcomplete(slot,pos,response) { // ... var t = ; // ul_macs - массив с контрольной суммой файла, полученной внутри worker"а for (p in ul_macs) t.push(p); // заполнение и сортировка временного массива, если кто знает зачем это - объясните пожалуйста t.sort(function(a,b) { return parseInt(a)-parseInt(b) }); for (var i = 0; i < 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 { // зашифрование имени файла на ключе, выведенном из ul_key и контрольной суммы // ctx.k == filekey a = { n: ctx.n }; if (d) console.log(ctx.k); var ea = enc_attr(a, ctx.k); if (d) console.log(ea); // передача атрибутов и зашифрованного на мастер-ключе ключа файла var req = { a: "p", t: ut, n: [{ h: ctx.t, t: 0, a: ab_to_base64(ea), // атрибуты k: a32_to_base64(encrypt_key(u_k_aes, ctx.k)), // == AES_encrypt(u_k, filekey) fa: ctx.fa }] }; if (ut) { // a target has been supplied: encrypt to all relevant shares var sn = fm_getsharenodes(ut); if (sn.length) { req.cr = crypto_makecr(, sn, false); req.cr = ctx.t; } } api_req(, ctx.ctx); } }

Скачивание и расшифрование файлов

Очевидно, что эти процессы должны быть просто обратными к зашифрованию файла. Единственное что может нести интерес - это получение значения ключа ul_key из пришедшего с сервера зашифрованного значения filekey .

На момент скачивания файла в контексте браузера уже содержится объект, хранящий расшифрованные ключи файлов. Поэтому сначала имеет смысл рассмотреть процесс, который происходит сразу после аутентификации пользователя, а именно - загрузку файл-менеджера. После того как пользователя пустили на сервис, ему естественно хочется получить доступ к своим файлам (предположим, что они у него уже там были). Для этого нам нужно расшифровать сначала ключи файлов, а затем - их атрибуты. Этим делом занимается очередная пачка функций, из которых нас интересуют loadfm_callback и process_f_f .

Вкратце процесс получения атрибутов файлов можно описать следующим алгоритмом:

  1. Дождаться загрузки файл-менеджера (loadfm_callback), где получить JSON с описанием всех загруженных файлов
  2. Создать массив farray , в который положить массив с информацией о файлах
  3. Запустить (рекурсивно) для каждого файла функцию process_f_f
  4. Для каждого файла, у которого есть ключ, расшифровать этот ключ и атрибуты (функция crypto_processkey) и сохранить их обратно в массив с информацией о файлах
  5. После этого сохранить расшифрованные значения в переменную FileStore (окончание рекурсии в process_f_f)
Ниже я приведу выдержки из кода, иллюстрирующие этот алгоритм

// callback загрузки файл-менеджера function loadfm_callback(json, res) { // ... // обработка JSON с информацией о файлах 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.ok); if (json.s) { for (i in json.s) { if (u_sharekeys.h]) { sharingData.push({ id: json.s[i].h + "_" + json.s[i].u, userid: json.s[i].u, folderid: json.s[i].h, rights: json.s[i].r, date: json.s[i].ts }); sharednodes.h] = true; } } } // ... дальше ничего особого... // занесение информации о файлах в еще один глобальный массив farray = new Object; farray.f = json.f; // запуск его обработки, callback был объявлен выше // в этой функции и просто модифицирует верстку process_f(fi, false, callback); fi++; } // рекурсивная функция, в которой происходит расшифрование ключей и атрибутов файлов // вызывается из process_f function process_f_f(fid) { // условие окончания рекурсии - мы обработали все файлы в массиве farray if (!farray.f.i]) { if (farray.ap) FileStore.suspendEvents(); // запись данных в 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); return false; } var f = farray.f.i]; f.attrs = f.a; if (f.sk) u_sharekeys = crypto_process_sharekey(f.h, f.sk); // если файл подходит по типу и имеет ключ, то обработаем его if ((f.t !== 2) && (f.t !== 3) && (f.t !== 4) && (f.k)) { crypto_processkey(u_handle, u_k_aes, f); // описание этой функции ниже u_nodekeys = f.key; if ((typeof f.name !== "undefined") && (f.p == InboxID)) InboxCount++; } else { if (f.a) { if (!missingkeys) { missingkeys = true; newmissingkeys = true; } } f.k = ""; f.name = ""; } if (f.t == 2) RootID = f.h; else if (f.t == 3) InboxID = f.h; else if (f.t == 4) TrashbinID = f.h; else if ((f.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 + ":"); // сначала проверим, не является ли файл общим if (p) { // I don"t - do I have a suitable sharekey? for (id in u_sharekeys) { p = file.k.indexOf(id + ":"); if (p >= 0 && (!p || file.k.charAt(p - 1) == "/")) break; p = -1; } } // а затем уже можем перейти к расшифрованию if (p >= 0) { delete keycache; // слеш - видимо признак шары var pp = file.k.indexOf("/", p); if (pp < 0) pp = file.k.length; p += id.length + 1; key = file.k.substr(p, pp - p); // we have found a suitable key: decrypt! if (key.length < 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(encrypt_key(u_k_aes, k)); } // если мы корректно расшифровали ключ и атрибуты - сохраняем их в объект файла file.key = k; file.name = o.n; } } } else { if (d) console.log("Received no suitable key: " + file.h); if (!missingkeys) { newmissingkeys = true; missingkeys = true; } keycache = file.k; } }
После этого мы можем получить значение исходного ключа ul_key из контекста браузера следующим образом: dl_keyNonce = JSON.stringify();
Это преобразование происходит в функции startdownload . Если учесть, что значение dl_key == filekey из функции ul_chunkcomplete и выполнить нехитрые операции сложения по модулю, то мы заметим, что в переменной dl_keyNonce будет хранится значение ul_key , сгенерированное при загрузке файла. Иллюстрацию этому можно наблюдать в нижнем левом углу доски на фотографии в начале раздела про загрузку файлов.

«Перегрузка» криптографических операций

Несмотря на то, что вышеописанные принципы защиты файлов и ключей являются весьма безопасными, кому-то может не понравиться, что мы все равно зависим от реализации алгоритмов, которые предоставляет сервис. В этом случае мы можем разработать свое расширение для браузера, которое будет переопределять некоторые функции сервиса, реализуя в них дополнительное шифрование. А именно, я решил реализовать защиту ключевой информации (мастер-ключа и ключей файлов) с помощью аппаратного шифрования на неизвлекаемом ключе по алгоритму ГОСТ 28147-89. Бонусом к этому также будет и включение на сервисе двухфакторной аутентификации.
Итак, рассмотрим такой use-case:
  • Пользователь регистрируется на сервисе
  • Затем он устанавливает расширение
  • С его помощью производится аппаратное зашифрование мастер-ключа на неизвлекаемом с токена ключе
  • Зашифрованный таким образом мастер-ключ загружается на сервер
После этого будет невозможно получить значение мастер-ключа не обладая токеном и его PIN-кодом. Это даст:
  1. Двухфакторную аутентификацию на сервисе (без корректно расшифрованного мастер-ключа «завалится» функция api_getsid2)
  2. Без токена также нельзя будет сменить текущий пароль учетной записи
Следующим шагом будет зашифрование с помощью токена ключа шифрования файла (он же ul_key) и ключа атрибутов файла (filekey), который как раз хранится на сервере. Таким образом, мы получим, что каждый файл будут зашифрован на ключе, который никогда не попадет на сервер, куда уйдет зашифрованный нами filekey из функции api_completeupload2 . Атрибуты файлов будут зашифрованы на открытом значении filekey . Для пущей наглядности я набросал следующую схему, иллюстрирующую процесс загрузки файла:

Хочу отметить, что здесь я применил весьма хитрый метод. В данном случае нам важно, чтобы злоумышленник не мог расшифровать файл, даже если он перехватит пришедший с сервера ключ файла и будет знать мастер-ключ пользователя. Поэтому тут можно сыграть на особенностях архитектуры сервиса и использовать для за(рас)шифрования файлов значение ключа ul_keyNonce (оно же dl_keyNonce), полученное в результате зашифрования на токене значения ключа ul_key (или dl_key).

С момента написания этих статей в наш продукт добавилась возможность аппаратного шифрования по алгоритму ГОСТ 28147-89. Beta-версию плагина с функциональностью аппаратного шифрования по алгоритму ГОСТ 28147-89 можно скачать . Эта версия плагина еще не прошла полное тестирование, поэтому предупреждаю о том, что в ней могут быть ошибки, о нахождении которых прошу сообщать в личку.
В интерфейсе плагина симметричное зашифрование реализуется функцией encrypt , которая имеет следующий синтаксис:
encrypt(deviceId, keyLabel, data, resultCallback, errorCallback) → {string}
В качестве входных данных функция принимает:

  • Идентификатор устройства, number
  • Метку ключа для шифрования, number (если такого ключа нет, он будет сгенерирован)
  • Зашифровываемые данные, string (строка, содержащая в себе байт-массив вида "aa:bb:cc:dd")
  • Функции обратного вызова для успешного и неуспешного завершения операции шифрования
Расшифрование производится аналогично с помощью функции decrypt
Отдельное внимание стоит уделить метке ключа, поскольку она определяет, на каком ключе будет производится за(рас)шифрование данных. Метка представляет собой произвольную строку и в основном служит для удобной идентификации ключа. В данном случае я использую две ключевых пары: одну для за(рас)шифрования мастер-ключа, вторую - для зашифрования индивидуальных ключей файлов. Ключ, на котором зашифровывается мастер-ключ имеет метку, равную паролю пользователя (сейчас мне пришла в голову идея использовать хеш от строки e-mail||пароль, в ближайшее время я это исправлю). Для зашифрования ключей загружаемых файлов используется ключ с меткой, равной строковому представлению мастер-ключа (здесь также стоит использовать хеш от мастер-ключа).

Непосредственно разработка

Сразу хочу сделать замечание по поводу моего исходного кода: он, по сути, находится в альфа-версии, хотя и реализует описанную выше функциональность. Я не проверял, насколько моя переделка получилась совместимой с остальными функциями сервиса, поэтому все исходники я выложил на github и буду рад любой помощи по доработке этой системы. Поэтому я не буду засорять статью дальше огромными листингами, а лишь опишу общую схему работы расширения.

Готовое расширение можно скачать . Разработано оно с помощью сервиса Crossrider , что дает расширения для трех браузеров (Chrome, Firefox и IE), но проверять его работу лучше в Chrome или Firefox, причем в первом оно работает гораздо стабильнее.

Код расширения до банального прост: он проверяет, находимся ли мы на странице сервиса и если это так, то просто подгружает дополнительные скрипты. Эти скрипты модифицируют код страницы, добавляя пару диалогов, и переопределяют следующие функции сервиса:

  • changepw: отвечает за смену пароля
  • api_getsid2: один из callback"ов логина
  • api_completeupload2: callback завершения загрузки файла
  • loadfm_callback: callback загрузки файл-менеджера
  • processpacket: очередной callback, в котором расшифровываются атрибуты только что загруженного файла
  • parsepage: отвечает за рисование дополнительных диалогов
  • dologin: расширяет возможности аутентификации
  • initupload3: отвечает за создание ключа шифрования файла
  • startdownload: обратный разбор ключа файла и инициализация скачивания
Еще раз хочу предупредить, что не стоит тащить расширение на рабочий аккаунт (если тут кто-нибудь вообще пользуется этим сервисом), а лучше завести тестовый. Для того, чтобы воспользоваться расширением после его установки вам будет нужно:
  1. Для начала неплохо раздобыть Рутокен ЭЦП (или Рутокен Web) и установить плагин для браузера
  2. Установить расширение
  3. Залогиниться на сервис с отключенным расширением
  4. Включить расширение в браузере
  5. Зайти на страницу учетной записи
  6. Нажать на кнопку «Привязать токен»
  7. Ввести текущий пароль и выполнить эту операцию
Вместо расширения можно воспользоваться следующим букмарклетом (проверено в Chrome, Safari, Firefox): javascript:(function(){if(document.getElementById("cryptorutokenjs")){alert("Плагин уже установлен");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(style)}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")})();

Демонстрация работы

Для начала подключим наше творение к сайту. Для этого:

Затем можно выйти из сервиса и попробовать снова зайти, используя двухфакторную аутентификацию:

Аутентификация при этом происходит по следующей схеме:

  1. Проверка пары логин-пароль на сервере
  2. Если логин-пароль правильные, то с сервера приходит зашифрованный мастер-ключ
  3. Посредством плагина производится запрос PIN-кода к токену
  4. Если PIN введен правильно, то производится расшифрование мастер-ключа на ключе с токена

Вместо заключения

Здесь мне так и хочется написать «продолжение следует...», поскольку я не осветил детали создания расширения и интересности прикручивания асинхронных функций шифрования в сервис, который в большинстве случаев использует синхронные вызовы. В заключении этой статьи я хотел бы еще раз обратиться к идее реализации client-side криптографии.
Подход к реализации дополнительных криптографических функций на стороне клиента может быть применен к любому веб-сервису, которому не важно, что хранить у себя на сервере: будь то файловое хранилище, почта или простейший чат. Например, можно реализовать защищенную почту на базе любого почтового сервиса с использованием шифрования сообщений в формате CMS и механизмов обмена ключами по алгоритму VKO GOST R 34.10-2001.
Спасибо за внимание, жду ваших вопросов и комментариев.javascript Добавить метки

Облачные хранилища остаются прижившимся в нашей жизни типом сервисов. Они пережили бурный рост, пережили перенасыщение рынка, когда новые «облака» открывались чуть ли не каждую неделю, пережили спад, когда эти же «облака» начали закрываться один за одним. И теперь перед нами просто тип сервиса, который устоялся и стал уже обыденностью, прошел испытание временем, учитывая особенности и скорости современной индустрии.

Облачных хранилищ существуют достаточно много. Каждые имеют свою особенностью и свою аудиторию. Кто-то выбирает только одно «облако», кто-то пользуется сразу несколькими. Мы же выбрали десятку, наиболее интересных из них. Одним из критериев данного топа является бесплатный тариф с бесплатным пространством в облаке, чтобы каждый пользователь смог сам опробовать его. Никакого триала, просто бесплатный тариф с бесплатным пространством.

10. pCloud

Достаточно интересное и быстро развивающееся облако. Блог облака обновляется чуть ли не каждую неделю, и видно, что разработчики активно трудятся над ним. Бесплатно дают 10 Гб, но выполнив несколько простых действий. Можно получить еще несколько Гб. Есть реферальная система, которая также позволит увеличить бесплатное место. Интересно также то, что pCloud, помимо ежемесячной и ежегодной абонентской платы за расширенные возможности, имеет также и тариф с разовым приобретением, вы просто платите определенную сумму и увеличиваете объем своего облака, навсегда, трудно припомнить какое облако еще так поступает.

9. MEGA

Шифрованное хранилище от Кима Доткома. Ходили слухи о том, что облако отобрали у него, о других неприятных перипетиях в управлении MEGA, но это не мешает облачному хранилищу развиваться и существовать дальше. Облако построено на достаточно высоком уровне шифрования, для более комфортной работы с веб-версией, лучше установить специальное расширение для браузера, чтобы процесс декодирования шел намного быстрее. Есть приложения для всех популярных операционных систем. Главное же, что привлекает многих, MEGA дает 50 Гб на бесплатном тарифе. Этот объем был на старте, он остается таким и по сей день.

8. MediaFire

Один из старейших сервисов в данном топе, работает хорошо, но развивается достаточно медленно. Нет версии для компьютеров, так что приходится пользоваться веб-версией, но с мобильными приложениями полный порядок.

Начинал MediaFire как файлообменник, но вовремя понял закат подобных сервисов и перепрофилировался в облачное хранилище. Старые пользователи и те, кто успел попасть под акцию, имеют 50 Гб бесплатного пространства, остальным же дают 10 Гб, но иногда появляется возможность бесплатно увеличить объем доступного места.

7. Box

Еще одно облачное хранилище, проверенное временем. Box изначально был ориентирован на бизнес и это позволило ему дожить до наших дней и иметь преданную базу пользователей. Бесплатно дают 10 Гб, а иногда проходят акции по получению 50 Гб бесплатного пространства. Вот только бесплатный тариф имеет множество ограничений. Все эти ограничения уберутся, если вы перейдете на подписку.

6. Облако Mail.Ru

Запустилось Облако Mail.Ru с 100 Гб бесплатного пространства, потом была акция, по которой можно было получить бесплатно 1 Тб, затем объем значительно снизили, а на новых аккаунтах дают мизерное количества места. Облако получило встроенных аудиоплеер, интеграцию с Office Online и продолжает получать новые возможности и поддержку новых форматов, но нестабильность с бесплатным объемом не дает поднять его выше в рейтинге.

5. Яндекс.Диск

Удивительно стабильное, в плане объема, облачное хранилище от Яндекса. На запуске давали 10 Гб бесплатного объема. Прошло несколько лет, а 10 Гб так и осталось, зато есть постоянные акции, когда можно или временно получить бесплатный объем, или увеличить облако на постоянной основе. Добавим сюда поддержку большого числа форматов, интеграцию с Office Online и постоянное развитие приложений.

В конце 2017 года Диск также выделился и . Все что вы загрузите в Яндекс.Диск с телефона — не будет учитываться при подсчете общего объема. По всей видимости это не акция, поскольку никаких сроков не называется. Ограничений по размеру также никаких нет, что делает данную возможность даже лучше, чем есть в Google Photos.

4. iCloud

Если вы любите технику от Apple, то обязательно сталкивались с данным облачным хранилищем. Через него работают многие приложения, происходит бэкап и синхронизация. Можно iCloud использовать и как привычное нам облачное хранилище. Добавим сюда прикрученный офисный пакет от Apple, приложение для Windows и получим неплохое облачное хранилище с преданной фанатской базой.

Вот только если вы не пользуетесь продукцией Apple, для вас более лучшим вариантом станет любое другое облачное хранилище в данном топе, поскольку оно даст вам больше возможностей.

3. Dropbox

Именно Dropbox считают сервисом, из-за которого и начался «взрывной» рост облачных хранилищ. Dropbox один из первых популяризовал данный тип сервисов, и хоть сейчас у него не лучшие времена, сервис продолжает развиваться и получать новые возможности. Бесплатно Dropbox дает всего 2 Гб. Увеличивающих бесплатный объем акций уже давно не проводили, а ограничения бесплатного тарифа не дают пользоваться облаком в полной мере. К сожалению, до идеального облачного хранилища Dropbox уже не дотягивает.

2. OneDrive

Облачное хранилище от Microsoft. Имеется плотная интеграция с офисным пакетом Office Online, который также интегрируют и в другие облачные хранилища, с согласия Microsoft. По умолчанию интегрирован в Windows 8.1 и Windows 10. Поддержка форматов тоже достаточно обширная. Работая в данном облаке, многие пользователи могут спокойно отказаться от полноценного пакета Microsoft Office или Microsoft Office 365, которые дают лишь расширенные возможности для более профессиональных задач.

Покупая подписку на Microsoft Office 365, вам также бонусом дают 1 Тб пространства в OneDrive. Так что многие просто не расширяют объем облака на платной основе, а просто приобретают подписку на Office, а заодно и облачное пространство увеличивают.

1. Google Диск

Облачное хранилище от Google имеет самое больше количество поддерживаемых форматов файлов, которое можно расширить при помощи дополнительных расширений для облака. Офисные документы небольшого объема, а также фотографии и видео с небольшим расширением – не учитываются при подсчете доступного места в облаке. А места этого 15 Гб.

Облако интегрировано с облачным офисным пакетом Google Docs, который имеет простой и удобный интерфейс за что предпочитаем многими для использования в качестве основного офисного пакета. Относительно недавно приложения Google Диска и Google Фото были объединены в одно приложение, получившее название «Google Автозагрузка и синхронизация». Были слухи про приложение для Linux, но пока многие продолжают пользоваться неофициальными клиентами и это чуть ли не единственный серьезный недостаток лидера нынешнего топа.

И Microsoft SkyDrive.

А вот облачное хранилище MEGA не так известно, хотя предлагает в бессрочное бесплатное пользование целых 50Gb, доступных сразу после регистрации!


Если Вам не помешает такая солидная «прибавка» к жесткому диску, и Вы хотите узнать как получить эти самые 50 гигабайт и эффективно ими распоряжаться, то читайте сегодняшний обзор!

Откуда взялся сервис MEGA.NZ

Поскольку Вы собираетесь доверить сервису какие-то свои личные данные, то не лишним будет узнать откуда он собственно взялся, и кто за ним стоит…

Наверняка Вы слышали про такое хранилище как Megaupload. Оно было закрыто в 2012 году по решению властей США – причастные к созданию сервиса, в том числе его основатель Ким Дотком, были обвинены ФБР в нарушении авторских прав (хранение и распространение лицензионного контента). Спустя ровно год Ким Дотком запустил новый сервис на домене mega.co.nz.

В настоящее время вход в облако доступен по адресу mega.nz , поэтому если встретите аналогичные обзоры данного хранилища, где в качестве адреса будет указан mega co или mega co nz, знайте, что они безнадежно устарели:)

Нужна ли регистрация на Мега?

На главной страничке хранилища Вы увидите большую красную кнопку с призывом перетащить на неё файлы и начать пользоваться сервисом.

Складывается ощущение, что регистрация для работы вообще не нужна. В принципе это так – Вы можете сразу же загрузить в облако какие-то свои файлы и даже увидите их в хранилище. Однако без регистрации Ваши загруженные данные будут удалены из хранилища после закрытия странички или браузера:

Поэтому пройдите стандартный процесс регистрации, после чего Вы сразу получаете 50 гигабайт места в облаке совершенно бесплатно!

Необходимые настройки сразу после регистрации

Mega nz огромное внимание уделят безопасности хранения данных и конфиденциальности. Подробно об этом поговорим чуть позже, а пока укажу на то, что надо обязательно сделать сразу после регистрации.


Поскольку сервис не хранит Ваш пароль на своих серверах, то в случае его утери у Вас не будет возможности восстановить доступ к своей учетной записи. Чтобы избежать подобной проблемы, надо скачать и сохранить на своем ПК ключ восстановления:

Это необходимая мера предосторожности, которой не стоит пренебрегать! Согласитесь, будет обидно потерять все свои файлы в облаке лишь потому, что Вы забыли пароль.

Как пользоваться хранилищем Mega

В левой части окна в меню нажмите на иконку облака:

Вы окажетесь в своем облачном диске. При помощи инструментов в верхней части окна Вы можете создавать новые папки, заливать туда файлы и даже загружать с компьютера готовые папки с файлами.

Работать с интерфейсом хранилища не сложнее чем с проводником в Windows. Клик правой клавишей мыши на папке или файле вызывает контекстное меню с целым набором возможностей.

С его помощью можно:

  • Получать информацию об элементе (размер, дата создания и пр.)
  • Назначать цветные метки и добавлять в Избранное
  • Переименовывать
  • Перемещать в пределах диска, копировать, удалять
  • Скачивать
  • Открывать общий доступ к папкам
  • Создавать публичную ссылку на скачивание файлов

Разработчики конечно же учли свой опыт негативный опыт с Megaupload, поэтому при создании публичной ссылки будет показано такое окошко, с условиями которого Вам остается только согласиться:

Сервис не накладывает никаких ограничений на размер загружаемых файлов! В пределах своей квоты в 50 GB Вы можете загрузить тысячи небольших файлов, либо, к примеру, два файла по 25 гигабайт каждый. Однако следует помнить, что сами браузеры имеют функциональные ограничения на размер файлов, которые они могут скачать. Наиболее «уязвимы» в этом плане браузеры Internet Explorer, Firefox и Safari, которые еще полностью не поддерживают HTML5.

Создание общего доступа к папкам с файлами

К любой папке в своем онлайн хранилище, Вы можете организовать общий доступ (расшарить её). Для этого проделайте следующие манипуляции:

  1. Кликните на ней правой клавишей мыши и в выпадающем контекстном меню выберите опцию «Общий доступ».
  2. Укажите адрес электронной почты пользователя, которому надо расшарить доступ к папке (можно сразу указать целый список пользователей).
  3. Выберите способ доступа: только для чтения, чтение и запись либо полный доступ.

После этого указанному пользователю на email придет письмо с ссылкой для доступа к расшаренной папке.

Как создать ссылку на файл в хранилище Mega nz

Помимо доступа к папкам, Вы можете разрешать любым пользователям скачивать из Вашего хранилища какие-то отдельные файлы.


Для этого надо кликнуть правой кнопкой мыши на любом файле в облаке и выбрать опцию «Получить ссылку»:

  1. Ссылка без ключа дешифрования
  2. Ссылка с ключом

Также в этом окошке можно отдельно скопировать сам ключ дешифрования. В чем же отличие между этими типами ссылок? А оно очень важное!

В первом случае пользователь, перейдя по ссылке, для скачивания файла должен будет ввести в специальное окошко ключ дешифрования, который Вы ему сообщите. А во втором случае, пользователь переходит по ссылке с уже «вшитым» ключом безопасности и может сразу же скачать файл.

Обзор функционала и настроек хранилища, не вошедших в обзор, смотрите в данном видео:

Почему Мега можно доверить личные данные?

  1. Разработчики уделяют самое пристальное внимание конфиденциальности хранимых данных. Сама аббревиатура MEGA расшифровывается как Mega Encrypted Global Access, т.е. Мега Зашифрованный Глобальный Доступ).
  2. Шифрование файлов прямо в браузере при помощи алгоритма AES.
  3. Сервис не хранит пароли пользователей для доступа к облачному диску.
  4. Все файлы в хранилище находятся в зашифрованном виде, их нельзя просмотреть без ключа безопасности. Даже если злоумышленники получат доступ к серверам компании, они не смогут прочитать данные пользователей.
  5. Даже к файлам, предназначенных для публичного скачивания, можно отдельно генерировать ключи доступа.

Всем привет! На связи с Вами Марат Наурузбаев. В этой статье я вам расскажу и покажу в видео как зарегистрироваться и пользоваться облачным сервисом для хранения файлов Mega , который предоставляет бесплатно 50 Гб дискового пространства! Mega облако также шифрует все ваши данные на стороне клиента и не имеет ограничений на размер загружаемых файлов.

В своем бесплатном видеокурсе я говорил про то что нужно резервировать свои важные данные (документы, проекты, личные фото и видео и т.д.) на другой жесткий диск, но еще надежнее будет размещать копию важных данных также и на облачном хранилище. Кроме того, что это будет надежнее, так ваши данные теперь будут доступны вам из любой точки земного шара, в том числе и со смартфона. Не правда, ли замечательная возможность пользоваться (просматривать и редактировать) свои файлы в любом месте, будь вы на работе, отдыхе или в кругу друзей?

Регистрация в Mega

Для того чтобы начать использовать облако для хранения файлов Mega, необходимо зарегистрироваться в нем. Для этого переходим на официальный сайт Mega . Нажимаем «Регистрация »

Создаем бесплатную учетную запись. Для этого вводим свои данные: Имя, Фамилия, Email и придумываем сложный пароль. Соглашаемся с условиями предоставления услуг Mega и нажимаем «Создать учетную запись »

Примечание: Если вы не находите письмо об активации аккаунта, проверьте папку Спам. Если и там его нет, повторите процедуру регистрации, указав другой Email.

Подтверждаем учетную запись вводом пароля, который придумали ранее

Выбираем бесплатный тариф (50 Гб ) или один из платных тарифов

Готово! Регистрация в облачном сервисе Mega пройдена.

Как пользоваться Mega

Как только Вы зарегистрировались в Mega, все операции Вы можете проводить в браузере. Для начала Вы можете войти в свою панель и проверить данные своего тарифного плана. Для этого кликаем на «Dashboard » в верхнем левом углу

Чтобы начать работать с Мега, переходим в основное окно, кликнув на «Облачный диск ». Здесь Вы увидите основные кнопки работы с сервисом: «Новая папка », «Загрузить файл », «Загрузить папку »

Также проверьте настройки своего аккаунта, кликнув «Настройки ». Например, в разделе «Продвинутые », во вкладке «Трансферы » можно указать количество параллельных соединений на загрузку и количество параллельных соединений на скачивание, а также параметры ограничения скорости на загрузку и другие параметры

Теперь загрузим папку или файл в облако Мега. Для этого переходим в основное окно сервиса, кликнув «Облачный диск ». Нажимаем «Загрузить папку » и указываем папку на Вашем компьютере, которую хотим загрузить в облако

Наша папка с компьютера, в моем случае папка с фото, начала загружаться в облако Mega…

После окончания загрузки мы можем увидеть содержимое данной папки прямо в браузере. Фотографии отображаются эскизами, что очень удобно

При наведении курсора на любой файл в облаке, появляется значок контекстного меню, и при клике на нем, мы можем выбрать основные операции для данного файла. Например, выбираем «Просмотр »

Откроется галерея с просмотром данного фото с возможностью просмотра остальных фото в данной папке. Для этого кликаем мышью на значках < или > , слева и справа фото соответственно

Также мы можем переименовать, переместить, скопировать или скачать любой файл к себе на компьютер. Например, при выборе скачать мы можем выбрать обычную загрузку или в сжатом формате ZIP. Выбираем «»

Файл будет сохранен на жестком диске вашего компьютера.

Общий доступ к папкам в Mega

В Мега облачное хранилище возможно предоставить общий доступ к папкам. Это удобно, когда вы, например, хотите, чтобы вашу определенную папку с файлами в облаке Mega видели не только Вы, но и ваши друзья или коллеги по работе. Для этого Вам нужно предоставить общий доступ к данной папке. Общий доступ можно предоставить другим лицам только по приглашению по Email.

Для того, чтобы предоставить общий доступ к определенной папке, кликаем правой кнопкой мыши по этой папке и в контекстном меню выбираем «Общий доступ »

Далее вбиваем Email того человека, которому хотим предоставить общий доступ к папке, даем ему права «Только для чтения », «Чтение и запись » или «Полный доступ » и нажимаем «Готово »

На Email того человека, которому вы предоставили общий доступ к папке, придет письмо, в котором он может принять приглашение, кликнув по ссылке в письме

и нажав кнопку «Принять »

Теперь Ваша папка, к которой вы предоставили общий доступ будет видна у приглашенного человека в облачном хранилище Mega. Естественно, приглашенный человек тоже должен иметь аккаунт в Mega

Кроме общего доступа к папке, у Вас появится возможность общаться с данным человеком посредством чата, аудио или видео звонков. Причем все ваше общение будет проходить в зашифрованном виде. Вот лазейка для общения террористов 🙂


Как получить ссылку в Mega

Полезная функция Mega, это предоставление ссылки на скачивание любого файла, размещенного в облаке Mega другим пользователям.

Допустим, у Вас имеется коллекция фото в Mega облаке и Вы хотите дать ссылку на определенное фото или на всю папку целиком какому то пользователю. Неважно имеется ли у него учетная запись Мега или нет, пользователь, после получения предоставленной ссылки от Вас, сможет скачать данный файл или папку целиком к себе на компьютер.

Имеется возможность сформировать два вида ссылки: без ключа и с ключом дешифрования .

Если Вы это делаете в первый раз, то выйдет предупреждение о защите авторских прав, с которым Вам нужно ознакомиться и нажать «Я согласен »

В следующем окне выбираете вариант экспорта ссылок: «Ссылка с ключом » или «Ссылка без ключа ». Давайте сначала предоставим “свободную” ссылку, т.е. ссылку с вшитым ключом. Для этого жмем «Ссылка с ключом » и нажимаем «Копировать »

Ваша ссылка скопируется в буфер обмена (временная память). Теперь эту ссылку Вы можете отправить своему другу, брату или товарищу 🙂 . Как это сделать, я думаю не стоит рассказывать, можете отправить ссылку по почте, в сообщении в социальных сетях, в Viber или Whatsapp и т.д.

  • Загрузить с MEGAsyng – загрузка файла только после установки клиента MEGAsyng. У кого клиент уже установлен, начнется закачка данного файла через клиент MEGAsyng;
  • Загрузить в браузере — загрузка файла обычным способом в браузере;
  • Импортировать на облачный диск – импорт файла на свой аккаунт в Mega.

а ключ дешифрования сформируем мы, выбрав вариант экспорта ссылок «Ключ дешифрования » и который предоставим пользователю за определенное вознаграждение 🙂

Пользователь вводит полученный от вас ключ и нажимает «Дешифровать »

И ему предлагается знакомые уже нам варианты скачивания файла. Выбираем, например, «Загрузить в браузере »

Видим, как файл скачивается и расшифровывается…


Клиент MEGA для Windows

Облачное хранилище Mega, кроме работы в браузере, предоставляет официальные приложения для Windows, Mac и Linux, а также мобильные приложения для Android и Iphone.

Рассмотрим, как установить и пользоваться приложением синхронизации Megasync для Windows.

Примечание: Синхронизация данных - ликвидация различий между двумя копиями данных. Предполагается, что ранее эти копии были одинаковы, а затем одна из них, либо обе были независимо изменены.

Для этого переходим на официальный сайт Mega и в правом верхнем углу нажимаем Меню

Находим пункт меню «Приложения » — «Приложение синхронизации »

Кликаем по кнопке «Загрузить бесплатно »

Указываем место сохранения дистрибутива Megasync и нажимаем «Сохранить »

Запускаем скачанный файл «MEGAsyncSetup » на установку

Установка клиента Megasync стандартная и не вызовет у Вас проблем…

Чтобы пролистать рисунки жмите «Назад » или «Вперед »

После первого запуска MEGAsync попросит Вас авторизоваться. Нажимаем «Вход » или «Регистрация », если Вы не зарегистрированы

При входе в учетную запись вводим почту и пароль

Выбираем «Выборочная синхронизация » и нажимаем «Вперед »

Указываем папки синхронизации на вашем жестком диске и в папке облака Мега. Оставляете по умолчанию или исправляем по кнопке «Изменить ». В дальнейшем Вы можете изменить эти папки или добавить другие. Нажимаем «Вперед »

Нажимаем «Готово »

Клиент MEGAsync запустится и будет работать в фоне. Его значок отобразится в трее и при клике по нему левой кнопкой мыши откроется небольшое окно, в котором отобразится панель управления Mega

Кликаем по шестеренке в панели управления и нажимаем настройки

Окно настроек состоит из нескольких вкладок, немного пройдемся по ним…

Вкладка «Учетная запис ь» отображает данные вашего Email и имеется возможность зарезервировать Ваш ключ, если Вы забудете пароль от учетной записи. Также отобразится ваша квота по дисковому пространству, опция включения/отключения уведомлений и включение/отключения автозагрузки приложения

Во вкладке «Синхронизации » можно добавить/удалить синхронизуемые папки

Во вкладке «Передача » можно выставить скорость загрузки и число параллельных TCP-подключений на передачу

Во вкладке «Продвинутые » можно изменить папки загрузки и скачивания по умолчанию, а также исключить имена файлов и папок из синхронизации. Можно исключить также по размеру файлов.

Например, можно исключить временные файлы и (или) файлы видео AVI, MTS или MP4, которые как правило занимают много дискового пространства или файлы MP3 с музыкой

По настройкам прошлись, нажимаем «OK » для сохранения настроек.

Теперь клиент MEGAsynс будет работать незаметно для Вас в фоне и синхронизировать файлы указанных папок в настройках клиента.

Чтобы отдельно загрузить какой либо файл на облако Mega через клиент MEGAsync, можно воспользоваться меню клиента. Для этого кликаем по значку MEGAsync в трее правой кнопкой мыши и выбираем «»

Откроется окно выбора файла, в котором мы можем выбрать файл(ы) или папку и нажать кнопку «Open »

Файл можно загрузить на Mega, просто кликнув по файлу в проводнике Windows правой кнопкой мыши и выбрав в контекстном меню «Загрузить на MEGA »

И наоборот, скачать файл с облака MEGA можно кликнув по значку MEGAsync в трее правой кнопкой мыши и выбрав в контекстном меню «Скачать »

В появившемся окне выбора папки выбрать файл(ы) или папку и нажать «OK »

Любые загрузки на облако или с облака можно увидеть в панели управления MEGAsync , кликнув по его значку в трее левой кнопкой мыши


Клиент MEGA для Android

Теперь рассмотрим как установить официальное приложение MEGA на смартфон на Android .

Для этого на своем смартфоне входим «Play Market » и вводим в строке поиска: “mega ”. Выбираем в результатах поиска MEGA от MegaLtd и тапаем по нему

Нажимаем «Установить »

Пойдет процесс скачивания и установки приложения

После установки приложения нажимаем «Открыть », т.е запускаем приложение

Жмем «Вход », если у Вас есть учетная запись Mega или «Создать учетную запись » для создания учетной записи

После нажатия «Вход » вводим Email и пароль указанный при регистрации

После ввода пароля идет расчет ключей шифрования

И происходит вход в учетную запись, после чего нужно указать через какой канал загружать фото с камеры на облако Mega, только Wi Fi , или Wi Fi или тарифный план (сотовая связь)

Заходим в настройки приложения Mega

И меняем или оставляем по умолчанию настройки приложения

Теперь мы можем открывать файлы, хранящиеся в облачном хранилище прямо на смартфоне! Например, заходим в папку фото…

И видим фото, которые мы скопировали в облако Mega с компьютера

При тапе на любом фото, оно открывается на весь экран

Также, у каждого файла есть контекстное меню, с помощью которого мы имеем возможность скачать файл на телефон, получить ссылку на файл, скопировать файл и другие операции…

Кроме меню на определенный файл имеется еще и общее меню приложения

С помощью которого например мы можем загрузить файл в облако. Для этого выбираем «Загрузить »

Выбираем тип файла (изображение, аудио или видео)

Находим данный тип файла, например фото у себя на смартфоне, для загрузки его в облако Mega

Вот основные функции облачного хранилища Mega. Данное облако резервирует и синхронизирует ваши файлы между компьютером, планшетом и смартфоном, а также предоставляет удобный доступ к вашим файлам из любой точки земного шара, где присутствует интернет.

Согласитесь, 50 Гб бесплатного зашифрованного дискового пространства и отсутствием ограничений на размер файла мало какой сервис предоставит. Совместный доступ к файлам, чат и секретные ссылки делают облако Mega еще привлекательнее.

Не обошлось и без минусов, скорость закачки файлов в Мега не всегда быстрая.

Кто знает облачный сервис с таким же или большим бесплатным объемом дискового пространства и с такими же возможностями, прошу написать в комментариях.

Хотите узнать больше о данном файловом хранилище?

  • Как увеличить размер бесплатного дискового пространства Mega в 5-10 раз ?
  • Как добавить папки для синхронизации?
  • Как исключить только определенные файлы из синхронизации?

Как синхронизировать только важные данные и какую лучше программу для этого использовать?

Если эти и другие вопросы по резервному копированию интересны Вам, то я могу создать для Вас видеокурс по резервному копированию и синхронизации Ваших данных . Это будет обновленный + видеоуроки о программе синхронизации и облачных хранилищах . Только он будет не бесплатный, но согласитесь, что потеря важных файлов будет стоить во много раз дороже!

Кому интересен данный видеокурс, прошу Вас проголосовать ниже. Мне важно услышать Ваше мнение о данной теме. Спасибо!

  • 46 ratings


  • 
    Top