você está aqui: Home  → Arquivo de Mensagens

Ebook Gratuito: Dá para fazer em Shell?, com o Prof. Julio Neves

Geração automática de senhas com makeky e encrippass

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 25 de Abril de 1997

Muitas instituições possuem a necessidade, de tempos em tempos, de criar um grande número de contas. A digitação de senhas consumiria um tempo enorme, requerendo a mobilização de um grande número de pessoas para suprir a esta demanda.

Para acelerar este processo pode-se gerar as senhas automaticamente e utilizar um outro programa para encripta-las. Para efetuar a encriptação das senhas pode-se usar o programa makekey ou similares. O programa makekey é encontrado no sistema operacional AIX. A plataforma Solaris não possui este programa mas a versão existente no SunOS funciona normalmente. Os exemplos que se seguem utilizam o programa makekey.

Por exemplo, para encriptar a senha xptouytr executar o comando

echo xptouytr12 | makekey > encrippass

O arquivo encrippass irá conter a senha encriptada. O argumento para o programa makekey deve conter obrigatoriamente 10 caracteres sendo que os 8 primeiros consistem da senha que sera utilizada. (Para maiores detalhes sobre o programa makekey, consultar a manpage em anexo).

No nosso exemplo em particular o arquivo encrippass irá conter a string 12foa4VUwoL6E, que deve então ser inserida no arquivo /etc/passwd ou /etc/shadow, etc.

Deve-se tomar bastante cuidado com esta edição para evitar que erros de programação estraguem os arquivos passwd. Recomenda-se sempre que se gere um backup dos arquivos password antes da sua edição.

Outra recomendação importante é que todas as senhas criadas por este método sejam expiradas, requerendo do usuário a sua troca quando do primeiro login. A maneira de se implementar isto varia de sistema para sistema.

Deve-se também imprimir uma carta ao usuário contendo, além da identificação do usuário e sua senha, as normas e políticas de uso dos computadores.

Existem vários programas disponíveis para geração aleatória de senhas. Incluo a seguir o código fonte do programa genp.c, que pode ser utilizado com esta finalidade.

—---------------------------  genp.c ----------------------------------------

/* genp - generate pronounceable passwords.
 * David Sherman, The Law Society of Upper Canada, dave@lsuc.on.ca
 */

#include <stdio.h>

char pwd[100];
char *vowels[]=
{
	"a",
	"e",
	"i",
	"o",
	"u",
	"y",
	"ai",
	"ou",
	"oy",
	"ay",
	"ow",
	"ar",
	"al",
	"el",
	"er",
	"or",
	"ax",
	"ex",
	"ix",
	"il",
	0
};

char *consonants[]=
{
	
	"b",
	"c",
	"ch",
	"d",
	"dr",
	"f",
	"fl",
	"g",
	"h",
	"j",
	"k",
	"kn",
	"kr",
	"m",
	"n",
	"p",
	"s",
	"sh",
	"sm",
	"sn",
	"st",
	"t",
	"th",
	"v",
	"z",
	0
};


main(argc, argv)
	char **argv;
{
	register int maxvowels, maxcons;
	int total;
	register int r, i;
	int j;
	char **p;
#define DEFTOTAL 1

	if(argc < 2)
		total = DEFTOTAL;
	else
		total = atoi(argv[1]);
	if(total < 1)
		total = DEFTOTAL;

	for(p=vowels; *p; p++)
		;
	maxvowels = p-vowels;

	for(p=consonants; *p; p++)
		;
	maxcons = p-consonants;


	srand(getpid());

	for(j=0; j<total; j++)
	{
		r = rand();
		strcpy(pwd, consonants[r%maxcons]);
		for(i=r%5; i>0; i--)
			r = rand();
		strcat(pwd, vowels[r%maxvowels]);
		r = rand();
		strcat(pwd, consonants[r%maxcons]);
		for(i=r%7; i>0; i--)
			r = rand();
		strcat(pwd, vowels[r%maxvowels]);
		r = rand();
		strcat(pwd, consonants[r%maxcons]);
		for(i=r%3; i>0; i--)
			r = rand();
		strcat(pwd, vowels[r%maxvowels]);
		puts(pwd);
	}
}

--------------- man page makekey (aix 4.1.4) ----------------------

makekey Command

Purpose

Generates an encryption key.

Syntax

makekey [ ASCIICharacters ... ]

Description

The makekey command generates an encryption key for use with programs
that perform encryption. Its input and output are usually pipes.

The makekey command reads 10 characters from standard input and writes
13 characters to standard output. The first 8 of the 10 input characters
can be any sequence of ASCII characters, as specified by the ASCIICharacters
parameter. The last two input characters, called the salt, are chosen
from the sets 0 through 9, a through z, A through Z, . (period), and
/ (slash). The salt characters are repeated as the first two characters
of the output. The remaining 11 output characters are chosen from
the same set as the salt and constitute the output key that you use
as the encryption key parameter of programs that perform encryption.

Examples

Entering the following example at the command line generates an encryption
key:

makekey
1234567890

The makekey command generates an encryption key based on the input
string 1234567890 and displays the following encryption key below,
with the $_ (shell prompt) appearing immediately after the generated
key and on the same line.

90y744T/NXw1U$_

Implementation Specifics

Software Product/Option:	Base Operating System/ Base Application Development
Toolkit

Standards Compliance:	BSD 4.3

Related Information

The crypt, encrypt, or setkey subroutine.


Veja a relação completa dos artigos de Rubens Queiroz de Almeida