;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Copyright (c) 2012, Intel Corporation ; ; All rights reserved. ; ; Redistribution and use in source and binary forms, with or without ; modification, are permitted provided that the following conditions are ; met: ; ; * Redistributions of source code must retain the above copyright ; notice, this list of conditions and the following disclaimer. ; ; * Redistributions in binary form must reproduce the above copyright ; notice, this list of conditions and the following disclaimer in the ; documentation and/or other materials provided with the ; distribution. ; ; * Neither the name of the Intel Corporation nor the names of its ; contributors may be used to endorse or promote products derived from ; this software without specific prior written permission. ; ; ; THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY ; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR ; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; Example YASM command lines: ; Windows: yasm -f x64 -D WINABI sha512_sse4.asm ; Linux: yasm -f elf64 sha512_sse4.asm ; # Modified by kerukuro for use in cppcrypto. BITS 64 section .text ; Virtual Registers %ifdef WINABI %define msg rcx ; ARG1 %define digest rdx ; ARG2 %define msglen r8 ; ARG3 %define T1 rsi %define T2 rdi %else %define msg rdi ; ARG1 %define digest rsi ; ARG2 %define msglen rdx ; ARG3 %define T1 rcx %define T2 r8 %endif %define a_64 r9 %define b_64 r10 %define c_64 r11 %define d_64 r12 %define e_64 r13 %define f_64 r14 %define g_64 r15 %define h_64 rbx %define tmp0 rax ; Local variables (stack frame) ; Note: frame_size must be an odd multiple of 8 bytes to XMM align RSP struc frame .W: resq 80 ; Message Schedule .WK: resq 2 ; W[t] + K[t] | W[t+1] + K[t+1] %ifdef WINABI .GPRSAVE: resq 7 %else .GPRSAVE: resq 5 %endif endstruc ; Useful QWORD "arrays" for simpler memory references %define MSG(i) msg + 8*(i) ; Input message (arg1) %define DIGEST(i) digest + 8*(i) ; Output Digest (arg2) %define K_t(i) K512 + 8*(i) wrt rip ; SHA Constants (static mem) %define W_t(i) rsp + frame.W + 8*(i) ; Message Schedule (stack frame) %define WK_2(i) rsp + frame.WK + 8*((i) % 2) ; W[t]+K[t] (stack frame) ; MSG, DIGEST, K_t, W_t are arrays ; WK_2(t) points to 1 of 2 qwords at frame.WK depdending on t being odd/even %macro RotateState 0 ; Rotate symbles a..h right %xdefine %%TMP h_64 %xdefine h_64 g_64 %xdefine g_64 f_64 %xdefine f_64 e_64 %xdefine e_64 d_64 %xdefine d_64 c_64 %xdefine c_64 b_64 %xdefine b_64 a_64 %xdefine a_64 %%TMP %endmacro %macro SHA512_Round 1 %assign %%t (%1) ; Compute Round %%t mov T1, f_64 ; T1 = f mov tmp0, e_64 ; tmp = e xor T1, g_64 ; T1 = f ^ g ror tmp0, 23 ; 41 ; tmp = e ror 23 and T1, e_64 ; T1 = (f ^ g) & e xor tmp0, e_64 ; tmp = (e ror 23) ^ e xor T1, g_64 ; T1 = ((f ^ g) & e) ^ g = CH(e,f,g) add T1, [WK_2(%%t)] ; W[t] + K[t] from message scheduler ror tmp0, 4 ; 18 ; tmp = ((e ror 23) ^ e) ror 4 xor tmp0, e_64 ; tmp = (((e ror 23) ^ e) ror 4) ^ e mov T2, a_64 ; T2 = a add T1, h_64 ; T1 = CH(e,f,g) + W[t] + K[t] + h ror tmp0, 14 ; 14 ; tmp = ((((e ror23)^e)ror4)^e)ror14 = S1(e) add T1, tmp0 ; T1 = CH(e,f,g) + W[t] + K[t] + S1(e) mov tmp0, a_64 ; tmp = a xor T2, c_64 ; T2 = a ^ c and tmp0, c_64 ; tmp = a & c and T2, b_64 ; T2 = (a ^ c) & b xor T2, tmp0 ; T2 = ((a ^ c) & b) ^ (a & c) = Maj(a,b,c) mov tmp0, a_64 ; tmp = a ror tmp0, 5 ; 39 ; tmp = a ror 5 xor tmp0, a_64 ; tmp = (a ror 5) ^ a add d_64, T1 ; e(next_state) = d + T1 ror tmp0, 6 ; 34 ; tmp = ((a ror 5) ^ a) ror 6 xor tmp0, a_64 ; tmp = (((a ror 5) ^ a) ror 6) ^ a lea h_64, [T1 + T2] ; a(next_state) = T1 + Maj(a,b,c) ror tmp0, 28 ; 28 ; tmp = ((((a ror5)^a)ror6)^a)ror28 = S0(a) add h_64, tmp0 ; a(next_state) = T1 + Maj(a,b,c) S0(a) RotateState %endmacro %macro SHA512_2Sched_2Round_sse 1 %assign %%t (%1) ; Compute rounds %%t-2 and %%t-1 ; Compute message schedule QWORDS %%t and %%t+1 ; Two rounds are computed based on the values for K[t-2]+W[t-2] and ; K[t-1]+W[t-1] which were previously stored at WK_2 by the message ; scheduler. ; The two new schedule QWORDS are stored at [W_t(%%t)] and [W_t(%%t+1)]. ; They are then added to their respective SHA512 constants at ; [K_t(%%t)] and [K_t(%%t+1)] and stored at dqword [WK_2(%%t)] ; For brievity, the comments following vectored instructions only refer to ; the first of a pair of QWORDS. ; Eg. XMM2=W[t-2] really means XMM2={W[t-2]|W[t-1]} ; The computation of the message schedule and the rounds are tightly ; stitched to take advantage of instruction-level parallelism. ; For clarity, integer instructions (for the rounds calculation) are indented ; by one tab. Vectored instructions (for the message scheduler) are indented ; by two tabs. mov T1, f_64 movdqa xmm2, [W_t(%%t-2)] ; XMM2 = W[t-2] xor T1, g_64 and T1, e_64 movdqa xmm0, xmm2 ; XMM0 = W[t-2] xor T1, g_64 add T1, [WK_2(%%t)] movdqu xmm5, [W_t(%%t-15)] ; XMM5 = W[t-15] mov tmp0, e_64 ror tmp0, 23 ; 41 movdqa xmm3, xmm5 ; XMM3 = W[t-15] xor tmp0, e_64 ror tmp0, 4 ; 18 psrlq xmm0, 61 - 19
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>VeraCrypt - Бесплатное надёжное шифрование дисков с открытым исходным кодом</title>
<meta name="description" content="VeraCrypt это бесплатное программное обеспечение для шифрования дисков с открытым исходным кодом для Windows, Mac OS X (macOS) и Linux. В случае, если злоумышленник вынуждает вас раскрыть пароль, VeraCrypt обеспечивает правдоподобное отрицание наличия шифрования. В отличие от пофайлового шифрования, VeraCrypt шифрует данные в реальном времени (на лету), автоматически, прозрачно, требует очень мало памяти и не использует временные незашифрованные файлы."/>
<meta name="keywords" content="encryption, security, шифрование, безопасность"/>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div>
<a href="Documentation.html"><img src="VeraCrypt128x128.png" alt="VeraCrypt"/></a>
</div>
<div id="menu">
<ul>
<li><a href="Home.html">Начало</a></li>
<li><a href="/code/">Исходный код</a></li>
<li><a href="Downloads.html">Загрузить</a></li>
<li><a class="active" href="Documentation.html">Документация</a></li>
<li><a href="Donation.html">Поддержать разработку</a></li>
<li><a href="https://sourceforge.net/p/veracrypt/discussion/" target="_blank">Форум</a></li>
</ul>
</div>
<div>
<p>
<a href="Documentation.html">Документация</a>
<img src="arrow_right.gif" alt=">>" style="margin-top: 5px">
<a href="Miscellaneous.html">Разное</a>
<img src="arrow_right.gif" alt=">>" style="margin-top: 5px">
<a href="Using%20VeraCrypt%20Without%20Administrator%20Privileges.html">Использование без прав администратора</a>
</p></div>
<div class="wikidoc">
<div>
<h2>Использование VeraCrypt без прав администратора</h2>
<p>В среде Windows пользователь, не имеющий прав администратора, <i>может</i> использовать TrueCrypt, но только
после того, как администратор компьютера установит VeraCrypt в систему. Причина в том, что для обеспечения незаметного
для пользователя шифрования/дешифрования "на лету" требуется наличие в системе драйвера VeraCrypt, а пользователи
без полномочий администратора не имеют прав на установку/запуск драйверов устройств в Windows.<br>
<br>
После того как администратор системы установит VeraCrypt, пользователи, не обладающие правами администратора,
смогут запускать VeraCrypt , монтировать/демонтировать тома VeraCrypt любого типа, загружать и сохранять в них данные,
а также создавать в системе тома VeraCrypt на основе файлов-контейнеров. В то же время, пользователи без привилегий
администратора <i>не</i> могут шифровать/форматировать разделы, создавать тома NTFS, устанавливать/удалять VeraCrypt,
изменять пароли/ключевые файлы для разделов/устройств VeraCrypt, выполнять резервное копирование и восстановление из
резервных копий заголовков разделов/устройств VeraCrypt, а также запускать VeraCrypt в "переносном" (portable) режиме.
</p>
<div>
<table style="border-collapse:separate; border-spacing:0px; text-align:left; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif">
<tbody style="text-align:left">
<tr style="text-align:left">
<td style="text-align:left; font-size:11px; line-height:13px; font-family:Verdana,Arial,Helvetica,sans-serif; color:#ff0000; padding:15px; border:1px solid #000000">
ВНИМАНИЕ: Вне зависимости от типа используемого программного обеспечения, с точки зрения сохранности персональной
информации в большинстве случаев <i>небезопасно</i> работать с конфиденциальными данными в системе, где у вас нет
привилегий администратора, так как администратор может без труда получить и скопировать ваши конфиденциальные данные,
в том числе пароли и ключи.
</td>
</tr>
</tbody>
</table>
<p> </p>
</div>
</div>
</div><div class="ClearBoth"></div></body></html>