Lyra2

Lyra2 is a password hashing scheme (PHS) that can also function as a key derivation function (KDF). It gained recognition during the Password Hashing Competition in July 2015,[1] which was won by Argon2. It is also used in proof-of-work algorithms such as Lyra2REv2,[2] adopted by Vertcoin[3] and MonaCoin,[4] among other cryptocurrencies.[5]

Lyra2 was designed by Marcos A. Simplicio Jr., Leonardo C. Almeida, Ewerton R. Andrade, Paulo C. F. dos Santos, and Paulo S. L. M. Barreto from Escola Politécnica da Universidade de São Paulo.[6] It is based on Lyra,[7][8] which had been created by the same team. Lyra2 includes:

  • The ability to configure the desired amount of memory, processing time, and parallelism for the algorithm.
  • High memory usage with processing time similar to scrypt.

In addition, it:[9]

  • Provides higher security against time-memory trade-offs.
  • Allows legitimate users to better benefit from the parallelism capabilities of their own platforms.
  • Increases the costs of creating dedicated hardware to attack the algorithm.
  • Balances resistance against side-channel threats and attacks using cheaper, slower storage devices.

Lyra2 is released into the public domain][citation needed].

Design

As any PHS, Lyra2 takes as input a salt and a password, creating a pseudorandom output that can then be used as key material for cryptographic algorithms or as an authentication string.[10][failed verification][citation needed]

Internally, the scheme's memory is organized as a matrix that is expected to remain in memory during the whole password hashing process. Since its cells are iteratively read and written, discarding a cell for saving memory leads to the need of recomputing it whenever it is accessed once again, until the point it was last modified.[5]

The construction and visitation of the matrix is done using a stateful combination of the absorbing, squeezing and duplexing operations of the underlying sponge (i.e., its internal state is never reset to zero), ensuring the sequential nature of the whole process.

Also, the number of times the matrix's cells are revisited after initialization is defined by the user, allowing Lyra2's execution time to be fine-tuned according to the target platform's resources.

Inputs

  • password
  • salt
  • t_cost - execution time
  • m_cost - memory required
  • outlen

The algorithm additionally enables parameterization in terms of:[11]

  • degree of parallelism (number of threads )
  • underlying permutation function (can be seen as the main cryptographic primitive)
  • number of blocks used by the underlying permutation function (bitrate)
  • number of rounds performed for the underlying permutation function ()
  • number of bits to be used in rotations ()
  • output length()

Functions/symbols

||
Concatenate two strings
^
Bitwise XOR
[+]
Word wise add operation (i.e., ignoring carries between words)
%
Modulus
W
The target machine's word size (usually, 32 or 64)
omega
Number of bits to be used in rotations (recommended: a multiple of the machine's word size, W)
>>>
Right rotation
rho
Number of rounds for reduced squeeze or duplexing operations
blen
Sponge's block size in bytes
H or H_i
Sponge with block size blen (in bytes) and underlying permutation f
H.absorb(input)
Sponge's absorb operation on input
H.squeeze(len)
Sponge's squeeze operation of len bytes
H.squeeze_{rho}(len)
Sponge's squeeze operation of len bytes using rho rounds of f
H.duplexing(input,len)
Sponge's duplexing operation on input, producing len bytes
H.duplexing_{rho}(input,len)
Sponge's duplexing operation on input, using rho rounds of f, producing len bytes
pad(string)
Pads a string to a multiple of blen bytes (padding rule: 10*1)
lsw(input)
The least significant word of input
len(string)
Length of a string, in bytes
syncThreads()
Synchronize parallel threads
swap(input1,input2)
Swap the value of two inputs
C
Number of columns on the memory matrix (usually, 64, 128, 256, 512 or 1024)
P
Degree of parallelism (P >= 1 and (m_cost/2) % P == 0)

Algorithm without parallelism

** Bootstrapping phase: Initializes the sponge's state and local variables
# Byte representation of input parameters (others can be added)
params =  outlen || len(password) || len(salt) || t_cost || m_cost || C

# Initializes the sponge's state (after that, password can be overwritten)
H.absorb( pad(password || salt || params) )

# Initializes visitation step, window and first rows that will feed 
gap = 1
stp = 1
wnd = 2
sqrt = 2

prev0 = 2
row1 = 1
prev1 = 0

** Setup phase: Initializes a (m_cost x C) memory matrix, its cells having blen-byte cells

# Initializes M[0], M[1] and M[2]
for col = 0 to C-1
	M[0][C-1-col] = H.squeeze_{rho}(blen)
for col = 0 to C-1
	M[1][C-1-col] = H.duplexing_{rho}( M[0][col], blen)
for col = 0 to C-1
	M[2][C-1-col] = H.duplexing_{rho}( M[1][col], blen)

# Filling Loop: initializes remainder rows
for row0 = 3 to m_cost-1
	# Columns Loop: M[row0] is initialized and M[row1] is updated
	for col = 0 to C-1
		rand = H.duplexing_{rho}( M[row1][col] [+] M[prev0][col] [+] M[prev1][col], blen)
		M[row0][C-1-col] = M[prev0][col] ^ rand
		M[row1][col] = M[row1][col] ^ ( rand >>> omega )

	# Rows to be revisited in next loop
	prev0 = row0
	prev1 = row1
	row1 = (row1 + stp) % wnd

	# Window fully revisited
	if (row1 = 0)
		# Doubles window and adjusts step
		wnd = 2 * wnd
		stp = sqrt + gap
		gap = -gap
		
		# Doubles sqrt every other iteration
		if (gap = -1)
			sqrt = 2 * sqrt
	
** Wandering phase: Iteratively overwrites pseudorandom cells of the memory matrix

# Visitation Loop: (2 * m_cost * t_cost) rows revisited in pseudorandom fashion
for wCount = 0 to ( (m_cost * t_cost) - 1)
	# Picks pseudorandom rows
	row0 = lsw(rand) % m_cost
	row1 = lsw( rand >>> omega ) % m_cost

	# Columns Loop: updates both M[row0] and M[row1]
	for col = 0 to C-1
		# Picks pseudorandom columns
		col0 = lsw( ( rand >>> omega ) >>> omega ) % C
		col1 = lsw( ( ( rand >>> omega ) >>> omega ) >>> omega ) % C

		rand = H.duplexing_{rho}( M[row0][col] [+] M[row1][col] [+] M[prev0][col0] [+] M[prev1][col1], blen)
		M[row0][col] = M[row0][col] ^ rand
		M[row1][col] = M[row1][col] ^ ( rand >>> omega )

	# Next iteration revisits most recently updated rows
	prev0 = row0
	prev1 = row1

** Wrap-up phase: output computation

# Absorbs a final column with a full-round sponge
H.absorb( M[row0][0] )

# Squeezes outlen bits with a full-round sponge
output = H.squeeze(outlen)

# Provides outlen-long bitstring as output
return output

Algorithm with parallelism

for each i in [0..P]
	** Bootstrapping phase: Initializes the sponge's state and local variables
	
	# Byte representation of input parameters (others can be added)
	params =  outlen || len(password) || len(salt) || t_cost || m_cost || C || P || i

	# Initializes the sponge's state (after that, password can be overwritten)
	H_i.absorb( pad(password || salt || params) )

	# Initializes visitation step, window and first rows that will feed 
	gap = 1
	stp = 1
	wnd = 2
	sqrt = 2
	sync = 4
	j = i

	prev0 = 2
	rowP = 1
	prevP = 0

	** Setup phase: Initializes a (m_cost x C) memory matrix, its cells having blen-byte cells

	# Initializes M_i[0], M_i[1] and M_i[2]
	for col = 0 to C-1
		M_i[0][C-1-col] = H_i.squeeze_{rho}(blen)
	for col = 0 to C-1
		M_i[1][C-1-col] = H_i.duplexing_{rho}( M_i[0][col], blen)
	for col = 0 to C-1
		M_i[2][C-1-col] = H_i.duplexing_{rho}( M_i[1][col], blen)

	# Filling Loop: initializes remainder rows
	for row0 = 3 to ( (m_cost / P) - 1 )
		# Columns Loop: M_i[row0] is initialized and M_j[row1] is updated
		for col = 0 to C-1
			rand = H_i.duplexing_{rho}( M_j[rowP][col] [+] M_i[prev0][col] [+] M_j[prevP][col], blen)
			M_i[row0][C-1-col] = M_i[prev0][col] ^ rand
			M_j[rowP][col] = M_j[rowP][col] ^ ( rand >>> omega )

		# Rows to be revisited in next loop
		prev0 = row0
		prevP = rowP
		rowP = (rowP + stp) % wnd

		# Window fully revisited
		if (rowP = 0)
			# Doubles window and adjusts step
			wnd = 2 * wnd
			stp = sqrt + gap
			gap = -gap
		
			# Doubles sqrt every other iteration
			if (gap = -1)
				sqrt = 2 * sqrt
		
		# Synchronize point
		if (row0 = sync)
			sync = sync + (sqrt / 2)
			j = (j + 1) % P
			syncThreads()

	syncThreads()
	
	** Wandering phase: Iteratively overwrites pseudorandom cells of the memory matrix

	wnd = m_cost / (2 * P)
	sync = sqrt
	off0 = 0
	offP = wnd

	# Visitation Loop: (2 * m_cost * t_cost / P) rows revisited in pseudorandom fashion
	for wCount = 0 to ( ( (m_cost * t_cost) / P) - 1)
		# Picks pseudorandom rows and slices (j)
		row0 = off0 + (lsw(rand) % wnd)
		rowP = offP + (lsw( rand >>> omega ) % wnd)
		j = lsw( ( rand >>> omega ) >>> omega ) % P

		# Columns Loop: update M_i[row0]
		for col = 0 to C-1
			# Picks pseudorandom column	
			col0 = lsw( ( ( rand >>> omega ) >>> omega ) >>> omega ) % C

			rand = H_i.duplexing_{rho}( M_i[row0][col] [+] M_i[prev0][col0] [+] M_j[rowP][col], blen)
			M_i[row0][col] = M_i[row0][col] ^ rand

		# Next iteration revisits most recently updated rows
		prev0 = row0
		
		# Synchronize point
		if (wCount = sync)
			sync = sync + sqrt
			swap(off0,offP)
			syncThreads()

	syncThreads()

	** Wrap-up phase: output computation

	# Absorbs a final column with a full-round sponge
	H_i.absorb( M_i[row0][0] )

	# Squeezes outlen bits with a full-round sponge
	output_i = H_i.squeeze(outlen)

# Provides outlen-long bitstring as output
return output_0 ^ ... ^ output_{P-1}

Security analysis

Against Lyra2, the processing cost of attacks using of the amount of memory employed by a legitimate user is expected to be between and , the latter being a better estimate for , instead of the achieved when the amount of memory is , where is a user-defined parameter to define a processing time.

This compares well to Scrypt, which displays a cost of when the memory usage is high,[12] and with other solutions in the literature, for which the results are usually .[7][13][14][15]

Nonetheless, in practice these solutions usually involve a value of (memory usage) lower than those attained with the Lyra2 for the same processing time.[16][17][18][19][20]

Performance

Performance of SSE-enabled Lyra2, for C = 256, ρ = 1, p = 1, and different T and R settings, compared with SSE-enabled Scrypt and memory-hard PHC finalists with minimum parameters.

The processing time obtained with an SSE single-core implementation of Lyra2 is illustrated in the hereby shown figure. This figure was extracted from,[9] and is very similar to, third-party benchmarks performed during the PHC context.[16][17][18][19][20]

The results depicted correspond to the average execution time of Lyra2 configured with , , bits (i.e., the inner state has 256 bits), and different and settings, giving an overall idea of possible combinations of parameters and the corresponding usage of resources.

As shown in this figure, Lyra2 is able to execute in: less than 1 s while using up to 400 MB (with and ) or up to 1 GB of memory (with and ); or in less than 5 s with 1.6 GB (with and ).

All tests were performed on an Intel Xeon E5-2430 (2.20 GHz with 12 Cores, 64 bits) equipped with 48 GB of DRAM, running Ubuntu 14.04 LTS 64 bits, and the source code was compiled using GCC 4.9.2.[9]


Extensions

Lyra offers two main extensions:[11]

  • **Lyra2-δ**: Provides more control over the algorithm's bandwidth usage.
  • **Lyra2p**: Takes advantage of parallelism capabilities on the user's platform.


References

  1. ^ "Password Hashing Competition". password-hashing.net. Retrieved 2016-03-22.
  2. ^ "Lyra2REv2". eprint.iacr.org. Retrieved 2016-03-22.
  3. ^ "Vertcoin". vertcoin.org. Retrieved 2019-10-08.
  4. ^ "MonaCoin". monacoin.org. Retrieved 2019-10-08.
  5. ^ a b van Beirendonck, M.; Trudeau, L.; Giard, P.; Balatsoukas-Stimming, A. (2019-05-29). A Lyra2 FPGA Core for Lyra2REv2-Based Cryptocurrencies. IEEE International Symposium on Circuits and Systems (ISCAS). Sapporo, Japan: IEEE. pp. 1–5. arXiv:1807.05764. doi:10.1109/ISCAS.2019.8702498.
  6. ^ "Cryptology ePrint Archive: Report 2015/136". eprint.iacr.org. Retrieved 2016-03-22.
  7. ^ a b Almeida, Leonardo C.; Andrade, Ewerton R.; Barreto, Paulo S. L. M.; Simplicio Jr, Marcos A. (2014-01-04). "Lyra: password-based key derivation with tunable memory and processing costs". Journal of Cryptographic Engineering. 4 (2): 75–89. CiteSeerX 10.1.1.642.8519. doi:10.1007/s13389-013-0063-5. ISSN 2190-8508. S2CID 5245769.
  8. ^ "Cryptology ePrint Archive: Report 2014/030". eprint.iacr.org. Retrieved 2016-03-22.
  9. ^ a b c Andrade, E.; Simplicio Jr, M.; Barreto, P.; Santos, P. (2016-01-01). "Lyra2: efficient password hashing with high security against time-memory trade-offs". IEEE Transactions on Computers. PP (99): 3096–3108. doi:10.1109/TC.2016.2516011. ISSN 0018-9340. S2CID 37232444.
  10. ^ Chen, Lily (2009). "Recommendation for Key Derivation Using Pseudorandom Functions (Revised)" (PDF). Computer Security. NIST. doi:10.6028/NIST.SP.800-108.
  11. ^ a b Simplicio Jr, Marcos A.; Almeida, Leonardo C.; Andrade, Ewerton R.; Santos, Paulo C.; Barreto, Paulo S. L. M. "The Lyra2 reference guide" (PDF). PHC. The Password Hashing Competition.
  12. ^ Percival, Colin. "Stronger Key Derivation via Sequential Memory-Hard Functions" (PDF). TARSNAP. The Technical BSD Conference.
  13. ^ "Cryptology ePrint Archive: Report 2013/525". eprint.iacr.org. Retrieved 2016-03-22.
  14. ^ Schmidt, Sascha. "Implementation of the Catena Password-Scrambling Framework" (PDF). Bauhaus-Universität Weimar. Faculty of Media.
  15. ^ "P-H-C/phc-winner-argon2" (PDF). GitHub. Retrieved 2016-03-22.
  16. ^ a b "Gmane -- Another PHC candidates mechanical tests". article.gmane.org. Retrieved 2016-03-22.
  17. ^ a b "Gmane -- A review per day Lyra2". article.gmane.org. Retrieved 2016-03-22.
  18. ^ a b "Gmane -- Lyra2 initial review". article.gmane.org. Retrieved 2016-03-22.
  19. ^ a b "Gmane -- Memory performance and ASIC attacks". article.gmane.org. Retrieved 2016-03-22.
  20. ^ a b "Gmane -- Quick analysis of Argon". article.gmane.org. Retrieved 2016-03-22.

Read other articles:

Sterling MarlinMarlin in 1996LahirSterling Burton Marlin30 Juni 1957 (umur 66)Columbia, TennesseePencapaian1994, 1995 Daytona 500 winner 1996 Winston 500 winner 1980–1982 Nashville Speedway USA Track ChampionPenghargaan1983 Winston Cup Series Rookie of the Year1995, 1996 Tennessee Professional Athlete of the Year2002 Tennessee Professional Athlete of the Year NomineeFairgrounds Speedway Hall of Fame Inductee (2009)Karier NASCAR Seri Piala748 lomba dalam kurun waktu 33 tahunHasil terbaik3r…

2020年夏季奥林匹克运动会波兰代表團波兰国旗IOC編碼POLNOC波蘭奧林匹克委員會網站olimpijski.pl(英文)(波兰文)2020年夏季奥林匹克运动会(東京)2021年7月23日至8月8日(受2019冠状病毒病疫情影响推迟,但仍保留原定名称)運動員206參賽項目24个大项旗手开幕式:帕维尔·科热尼奥夫斯基(游泳)和马娅·沃什乔夫斯卡(自行车)[1]闭幕式:卡罗利娜·纳亚(皮划艇)[2…

Corrections facility general hospital Hospital in Central Region, UgandaMurchison Bay HospitalUganda Prisons DepartmentGeographyLocationLuzira, Nakawa Division, Kampala, Central Region, UgandaCoordinates00°17′58″N 32°38′30″E / 0.29944°N 32.64167°E / 0.29944; 32.64167OrganisationCare systemPrisonTypeGeneralServicesEmergency departmentIIIHistoryOpened1962LinksOther linksHospitals in Uganda Murchison Bay Hospital is a hospital in the Central Region of Uganda. Thi…

بورغنترايش    علم شعار   الإحداثيات 51°34′09″N 9°14′28″E / 51.569169444444°N 9.2411305555556°E / 51.569169444444; 9.2411305555556   [1] تقسيم إداري  البلد ألمانيا[2][3]  التقسيم الأعلى هوكستر  خصائص جغرافية  المساحة 138.94 كيلومتر مربع (2017)[4]  ارتفاع 205 متر  عدد …

فمسي كريشنا موثا معلومات شخصية الميلاد سنة 1970 (العمر 53–54 سنة)  كاكينادا بولاية أندرا براديش في الهند الإقامة بوسطن  مواطنة الهند الولايات المتحدة  عضو في الأكاديمية الوطنية للعلوم  الحياة العملية التعلّم (دكتور في الطب) جامعة ستانفورد ألما ماتر هارفارد - قسم الع…

American college basketball season 1906–07 Trinity Blue and White men's basketballConferenceIndependentRecord4–2Head coachWilbur Wade Card (2nd season)CaptainThad StemSeasons← 1905–061907–08 → The 1906–07 Trinity Blue and White's basketball team represented Trinity College (later renamed Duke University) during the 1906–07 men's college basketball season. The head coach was Wilbur Wade Card and the team finished with an overall record of 4–2.[1] S…

Business school part of University of Wales Trinity Saint David Swansea Business SchoolTypeBusiness SchoolEstablished1897 (Swansea Technical College)2010 (University of Wales Trinity Saint David)DeanRoger MaidmentStudents<1000LocationSwansea, WalesAffiliationsUniversity of Wales Trinity Saint DavidWebsiteSwansea Business School Swansea Business School (Welsh: Ysgol Fusnes Abertawe) is a public research institution focusing on business studies and is situated in the city of Swansea, Wales, UK.…

Computer network that connects devices across a large distance and area A local area network (LAN) with connection to a wide area network (WAN) Computer network typesby scale Nanoscale Near-field (NFC) Body Personal (PAN) Near-me Local (LAN) Storage (SAN) Wireless (WLAN) Virtual (VLAN) Home (HAN) Building Campus (CAN) Backbone Metropolitan (MAN) Municipal wireless (MWN) Wide (WAN) Cloud Internet Interplanetary Internet vte A wide area network (WAN) is a telecommunications network that extends ov…

Moroccan professional footballer Marouane Hadhoudi Hadhoudi playing for Raja CA in 2012Personal informationDate of birth (1992-02-13) 13 February 1992 (age 32)Place of birth Casablanca, MoroccoHeight 1.90 m (6 ft 3 in)Position(s) Centre-backTeam informationCurrent team SabahNumber 24Youth career2003-2011 Raja CASenior career*Years Team Apps (Gls)2011-2013 Raja CA 1 (0)2012-2013 → Racing AC (loan) 19 (0)2013–2014 Chabab Rif Al Hoceima 7 (0)2014–2015 RS Berkane 3 (0)2015…

This is Pbsouthwood's talk page, where you can send them messages and comments. Put new text under old text. Click here to start a new topic. New to Wikipedia? Welcome! Learn to edit; get help. Assume good faith Be polite and avoid personal attacks Be welcoming to newcomers Seek dispute resolution if needed Archives: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30Auto-archiving period: 30 days  Archives: /Archive This page has archi…

Division Nationale 2023-2024BGL Ligue 2023-2024 Competizione Division Nationale Sport Calcio Edizione 110ª Organizzatore FLF Date dal 5 agosto 2023al 26 maggio 2024 Luogo Lussemburgo Partecipanti 16 Formula Girone all'italiana Sito web https://www.flf.lu/ Risultati Vincitore Differdange 03(1º titolo) Secondo Swift Hesperange Retrocessioni Marisca MierschSchifflange 95 Cronologia della competizione 2022-2023 2024-2025 Manuale La Division Nationale 2023-2024, nota anche come BGL Ligue 20…

  ميّز عن مناعة اجتماعية. يُظهر المُربع العلوي تفشي المرض في مجتمعٍ فيه عددٌ قليلٌ مُصابٌ من الأفراد (كما هو موضح باللون الأحمر) ويكون الباقي بصحةٍ جيدة ولكنهم غيرُ محصنين مناعيًا (كما هو موضح باللون الأزرق)، وبالتالي ينتشرُ المرض بحريةٍ بين جميع الأفراد. يُظهر المربع ال…

Titihan barat Aechmophorus occidentalis Status konservasiRisiko rendahIUCN22696631 TaksonomiDivisiManiraptoriformesKelasAvesOrdoPodicipediformesFamiliPodicipedidaeGenusAechmophorusSpesiesAechmophorus occidentalis (Lawrence, 1858) Tata namaProtonimPodiceps occidentalis Distribusi Titihan barat [2] ( Aechmophorus occidentalis ) [3] adalah spesies burung dalam keluarga burung air titihan. Masyarakat lokal Amerika lebih sering menyebutnya sebagai dabchick, swan grebe dan swan-necked …

Francesc Macià Fonctions Président de la généralité de Catalogne (en fonction dès le 17 avril 1931) 14 décembre 1932 – 25 décembre 1933(1 an et 11 jours) Prédécesseur Josep de Vilamala (avant les décrets de Nueva Planta) Successeur Lluís Companys Biographie Date de naissance 21 octobre 1859 Lieu de naissance Vilanova i la Geltrú, Catalogne (Espagne) Date de décès 25 décembre 1933 (à 74 ans) Lieu de décès Barcelone, Catalogne (Espagne) Nationalité Espagnole Pa…

United States federal prison in Colorado Not to be confused with ADX Florence. United States Penitentiary, Florence HighLocationFremont County,near Florence, ColoradoCoordinates38°21′42″N 105°05′45″W / 38.36167°N 105.09583°W / 38.36167; -105.09583StatusOperationalSecurity classHighPopulation971 (September 2023)Opened1993Managed byFederal Bureau of PrisonsWardenM. Starr The United States Penitentiary, Florence High (USP Florence High) is a high-security United …

Ekor kuda padang rumput Equisetum pratense Klasifikasi ilmiah Kerajaan: Plantae Divisi: Polypodiophyta Kelas: Polypodiopsida Ordo: Equisetales Famili: Equisetaceae Genus: Equisetum Spesies: E. pratense Nama binomial Equisetum pratenseEhrh., 1784 Equisetum pratense, disebut juga ekor kuda padang rumput, ekor kuda rindang atau ekor kuda gelap, merupakan spesies tumbuhan milik divisi paku ekor kuda (Equisetophyta). Spesies ini dapat ditmukan di hutan yang memiliki tumbuhan tinggi atau dedaunan…

かきいわ れいか垣岩 令佳(Kakiiwa Reika)基本資料代表國家/地區 日本出生 (1989-07-19) 1989年7月19日(34歲)[1] 日本滋賀縣大津市[1]身高1.66米(5英尺51⁄2英寸)[1]握拍右手主項:女子雙打、混合雙打職業戰績10勝–8負(女單)196勝–122負(女雙)7勝–16負(混雙)最高世界排名第3位(女雙-藤井瑞希)(2011年8月18日 [2])現時世界排名沒有排名BWF id…

 Rally di Turchia 2003 N. 3 su 14 del Campionato del mondo rally 2003 Data dal 27 febbraio al 2 marzo 2003 Nome ufficiale 4th Rally of Turkey Percorso 338,24 km Superficie Sterrato Prove speciali 18 Equipaggi Partiti: 60Arrivati: 26 Risultati WRC Podio 1. Carlos Sainz(Citroën) 2. Richard Burns(Peugeot) 3. François Duval(Ford) Il Rally di Turchia 2003, ufficialmente denominato 4th Rally of Turkey, è stata la terza prova del campionato del mondo rally 2003 nonché la quarta edizione del Ra…

Common speech variety of a specific population For other uses, see Vernacular (disambiguation). The examples and perspective in this article may not represent a worldwide view of the subject. You may improve this article, discuss the issue on the talk page, or create a new article, as appropriate. (September 2019) (Learn how and when to remove this message) Vernacular is the ordinary, informal, spoken form of language,[1] particularly when perceived as being of lower social status in con…

Fabrication technique using strength fibres in a binding matrix Filament winding is a fabrication technique mainly used for manufacturing open (cylinders) or closed end structures (pressure vessels or tanks). This process involves winding filaments under tension over a rotating mandrel. The mandrel rotates around the spindle (Axis 1 or X: Spindle) while a delivery eye on a carriage (Axis 2 or Y: Horizontal) traverses horizontally in line with the axis of the rotating mandrel, laying down fibers …