/docs/man1.1.1/man7/scrypt.html (2024)

scrypt

NAME

scrypt - EVP_PKEY scrypt KDF support

DESCRIPTION

The EVP_PKEY_SCRYPT algorithm implements the scrypt password based key derivation function, as described in RFC 7914. It is memory-hard in the sense that it deliberately requires a significant amount of RAM for efficient computation. The intention of this is to render brute forcing of passwords on systems that lack large amounts of main memory (such as GPUs or ASICs) computationally infeasible.

scrypt provides three work factors that can be customized: N, r and p. N, which has to be a positive power of two, is the general work factor and scales CPU time in an approximately linear fashion. r is the block size of the internally used hash function and p is the parallelization factor. Both r and p need to be greater than zero. The amount of RAM that scrypt requires for its computation is roughly (128 * N * r * p) bytes.

In the original paper of Colin Percival ("Stronger Key Derivation via Sequential Memory-Hard Functions", 2009), the suggested values that give a computation time of less than 5 seconds on a 2.5 GHz Intel Core 2 Duo are N = 2^20 = 1048576, r = 8, p = 1. Consequently, the required amount of memory for this computation is roughly 1 GiB. On a more recent CPU (Intel i7-5930K at 3.5 GHz), this computation takes about 3 seconds. When N, r or p are not specified, they default to 1048576, 8, and 1, respectively. The default amount of RAM that may be used by scrypt defaults to 1025 MiB.

NOTES

A context for scrypt can be obtained by calling:

 EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_SCRYPT, NULL);

The output length of an scrypt key derivation is specified via the length parameter to the EVP_PKEY_derive(3) function.

EXAMPLES

This example derives a 64-byte long test vector using scrypt using the password "password", salt "NaCl" and N = 1024, r = 8, p = 16.

 EVP_PKEY_CTX *pctx; unsigned char out[64]; size_t outlen = sizeof(out); pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_SCRYPT, NULL); if (EVP_PKEY_derive_init(pctx) <= 0) { error("EVP_PKEY_derive_init"); } if (EVP_PKEY_CTX_set1_pbe_pass(pctx, "password", 8) <= 0) { error("EVP_PKEY_CTX_set1_pbe_pass"); } if (EVP_PKEY_CTX_set1_scrypt_salt(pctx, "NaCl", 4) <= 0) { error("EVP_PKEY_CTX_set1_scrypt_salt"); } if (EVP_PKEY_CTX_set_scrypt_N(pctx, 1024) <= 0) { error("EVP_PKEY_CTX_set_scrypt_N"); } if (EVP_PKEY_CTX_set_scrypt_r(pctx, 8) <= 0) { error("EVP_PKEY_CTX_set_scrypt_r"); } if (EVP_PKEY_CTX_set_scrypt_p(pctx, 16) <= 0) { error("EVP_PKEY_CTX_set_scrypt_p"); } if (EVP_PKEY_derive(pctx, out, &outlen) <= 0) { error("EVP_PKEY_derive"); } { const unsigned char expected[sizeof(out)] = { 0xfd, 0xba, 0xbe, 0x1c, 0x9d, 0x34, 0x72, 0x00, 0x78, 0x56, 0xe7, 0x19, 0x0d, 0x01, 0xe9, 0xfe, 0x7c, 0x6a, 0xd7, 0xcb, 0xc8, 0x23, 0x78, 0x30, 0xe7, 0x73, 0x76, 0x63, 0x4b, 0x37, 0x31, 0x62, 0x2e, 0xaf, 0x30, 0xd9, 0x2e, 0x22, 0xa3, 0x88, 0x6f, 0xf1, 0x09, 0x27, 0x9d, 0x98, 0x30, 0xda, 0xc7, 0x27, 0xaf, 0xb9, 0x4a, 0x83, 0xee, 0x6d, 0x83, 0x60, 0xcb, 0xdf, 0xa2, 0xcc, 0x06, 0x40 }; assert(!memcmp(out, expected, sizeof(out))); } EVP_PKEY_CTX_free(pctx);

CONFORMING TO

RFC 7914

SEE ALSO

EVP_PKEY_CTX_set1_scrypt_salt(3), EVP_PKEY_CTX_set_scrypt_N(3), EVP_PKEY_CTX_set_scrypt_r(3), EVP_PKEY_CTX_set_scrypt_p(3), EVP_PKEY_CTX_set_scrypt_maxmem_bytes(3), EVP_PKEY_CTX_new(3), EVP_PKEY_CTX_ctrl_str(3), EVP_PKEY_derive(3)

COPYRIGHT

Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the OpenSSL license (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at https://www.openssl.org/source/license.html.

/docs/man1.1.1/man7/scrypt.html (2024)

FAQs

What is the agetty process? ›

agetty is a Linux version of getty. getty short for “get tty” is a Unix program running on a host computer that manages physical or virtual terminals to allow multi-user access. Linux provides virtual terminal(tty) which is similar to the regular Linux terminal.

Is GCC the same as g++? ›

“GCC” is a common shorthand term for the GNU Compiler Collection. This is both the most general name for the compiler, and the name used when the emphasis is on compiling C programs (as the abbreviation formerly stood for “GNU C Compiler”). When referring to C++ compilation, it is usual to call the compiler “G++”.

What does g++ mean? ›

g++ command is a GNU c++ compiler invocation command, which is used for preprocessing, compilation, assembly and linking of source code to generate an executable file. The different “options” of g++ command allow us to stop this process at the intermediate stage.

What is expect in Linux? ›

The 'expect' command is a powerful tool in Linux, used to automate interactive applications. It's a program that 'talks' to other interactive programs according to a script. It's particularly useful when automating tasks that require user interaction, such as entering passwords or responding to prompts.

What is the use of agetty? ›

agetty is invoked by init. It is the second process in the series init-getty-login-shell, which ultimately connects a user with the Linux system. agetty reads the user's login name and invokes the login command with the user's name as an argument.

What is ttyS0? ›

/dev/ttyS* is a naming convention for serial ports on Linux systems. Further, the * is a number that indicates the order of the port: /dev/ttyS0 is the first serial port. /dev/ttyS1 is the second serial port.

Can I use GCC for C++? ›

GCC recognizes files with these names and compiles them as C++ programs even if you call the compiler the same way as for compiling C programs (usually with the name gcc ). However, the use of gcc does not add the C++ library. g++ is a program that calls GCC and automatically specifies linking against the C++ library.

Is GCC for C or C++? ›

The GNU Compiler Collection, commonly known as GCC, is a set of compilers and development tools available for Linux, Windows, various BSDs, and a wide assortment of other operating systems. It includes support primarily for C and C++ and includes Objective-C, Ada, Go, Fortran, and D.

How to compile C++? ›

Compile and Execute C++ Program
  1. Open a text editor and add the code as above.
  2. Save the file as: hello.cpp.
  3. Open a command prompt and go to the directory where you saved the file.
  4. Type 'g++ hello. cpp' and press enter to compile your code. ...
  5. Now, type 'a. ...
  6. You will be able to see ' Hello World ' printed on the window.

What is compile flag? ›

A compiler flag is the way A programmer gives instructions tot a compiler. In Unix and Linux and many all applications use flags for this.

How to compile C code? ›

To compile the C program you just wrote, use the gcc compiler: Step 1: Open your terminal, navigate to the directory containing your C file using the cd command. Step 2: Type gcc myfile. c -o hello to compile your C file.

How to run a cpp file in terminal? ›

To run the C++ program in your terminal, you need to make sure to change the directory to the one where your program resides, you can use the 'cd <File_Path>' command to change the path and to generate an executable file, the command, 'g++ File_Name. cpp -o FileName', is used.

What is a .expect file? ›

Expect is a UNIX scripting and testing utility which can be used with SSH-based applications, like the Oracle VM CLI. Expect scripts can have any file name suffix you like, though they generally have an .exp extension.

How to run a script using sshpass? ›

Using sshpass

In that file add the password for the account used in the shell script and save it with the Ctrl-x keyboard shortcut. You'll be prompted to type and verify a password for the encryption. The above command will create a new file, named .

What does spawn a shell mean? ›

“Spawning a shell” simply means spawning an interactive TTY, by exploiting the RCE vulnerability, or gaining access to a protocol like SSH.

What are other names for GCC? ›

The Cooperation Council for the Arab States of the Gulf (Arabic: مجلس التعاون لدول خلیج العربية), also known as the Gulf Cooperation Council (GCC; Arabic: مجلس التعاون الخليجي), is a regional, intergovernmental, political, and economic union comprising Bahrain, Kuwait, Oman, Qatar, Saudi Arabia, and the United Arab ...

What is the GCC equivalent of C++? ›

g++ is used to compile C++ program. gcc is used to compile C program. g++ can compile any . c or .

Is g++ for C++? ›

gcc is the "GNU" C Compiler, and g++ is the "GNU C++ compiler, while cc and CC are the Sun C and C++ compilers also available on Sun workstations.

What does GCC stand for? ›

Gulf Cooperation Council (GCC), political and economic alliance of six Middle Eastern countries—Saudi Arabia, Kuwait, the United Arab Emirates, Qatar, Bahrain, and Oman.

Top Articles
Latest Posts
Article information

Author: Rob Wisoky

Last Updated:

Views: 6138

Rating: 4.8 / 5 (48 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Rob Wisoky

Birthday: 1994-09-30

Address: 5789 Michel Vista, West Domenic, OR 80464-9452

Phone: +97313824072371

Job: Education Orchestrator

Hobby: Lockpicking, Crocheting, Baton twirling, Video gaming, Jogging, Whittling, Model building

Introduction: My name is Rob Wisoky, I am a smiling, helpful, encouraging, zealous, energetic, faithful, fantastic person who loves writing and wants to share my knowledge and understanding with you.