sábado, 2 de maio de 2020

Compilando um programa em C

Compilando.

Em GNU/Linux, usamos o compilador gcc para compilar arquivos em C.

O gcc é um compilador que pode ser rodado a partir de um terminal para compilar um arquivo.
 Para usá-lo, abra um terminal, e de o comando:
 $ gcc nome do programa  -o arquivo de saida

  Feito isso, se não houver nenhum erro de compilação, um arquivo a.out executável será gerado.

 O gcc também aceita opções diversas bastante úteis, entre elas: -Wall, -pedantic, -ansi, -O2, e -o .
 As opções -Wall, -ansi, -pendatic e -O2 servem para te avisar de erros em potencial no seu programa, como tentar usar uma atribuição em vez de comparação (if(x = y) em vez de if(x == y)), e muitos outros erros comuns.
 Já a opção -o serve para escolher o nome do arquivo de saída, que sucede a opção.

 Um exemplo básico:

 $ gcc hello.c -Wall -pedantic -ansi -O2 -o ola 

Isso gera o arquivo executável ola que pode ser executado com:

 $ ./ola → Dentro do diretório em que foi criado, ou passando o path completo ex ./home/edson/docs/ola Importante: 

Nunca coloque o mesmo nome do seu arquivo no arquivo de saída! Isso irá sobrescrever seu arquivo original com um executável não editável e você perderá seu programa. 

Fazendo um Hello World em C Vamos fazer um simples programa que imprime Ola Mundo na saída. 
Em um terminal, abra o editor de texto com: $ geany Ou abra qualquer outro editor de sua preferência.

 Coloque as seguintes linhas no arquivo: 
#include
  int main() {
 printf("Ola Mundo!\n");
 return 0; }

 No terminal, em linha de comando compile usando: 

$ gcc hello.c -o ola 
E rode com: $ ./ola 
Se deu tudo certo, você verá um "Ola Mundo!" no terminal.
 Parabéns, você acaba de fazer seu primeiro programa em C em GNU/Linux!

segunda-feira, 7 de outubro de 2019

OpenSSl chaves assinatura e validação


A assinatura e verificação de código é o processo de assinatura digital de executáveis ou scripts para garantir que o software que você está executando não tenha sido alterado desde que foi assinado. A assinatura de código ajuda a proteger contra artefatos corrompidos, quebra de processo (entrega acidental de algo errado) e até intenções maliciosas. 

A assinatura digital contempla os requisitos básicos dos pilares da Segurança da Informação, o C.I.D.A.L. que reúne cinco aspectos:

 Confidencialidade, Integridade, Disponibilidade, Autenticidade e Legalidade. Esses aspectos trazem especificamente esses conceitos:

          Confidencialidade - tem a ver com a privacidade dos dados da organização. Esse conceito se relaciona às ações tomadas para assegurar que informações confidenciais e críticas não sejam roubadas dos sistemas organizacionais por meio de ciberataques, espionagem, entre outras práticas.

Integridade - Dados inteiros, completos, retos e incorruptíveis. Quando enviamos ou recebemos qualquer tipo de informação queremos que esses dados sejam verdadeiros, ou seja, não seja alterado por outra pessoa. Por exemplo, ao fazermos um backup de determinado arquivo, queremos que esse backup seja uma cópia fiel do arquivo original e se mantenha sempre assim.

Disponibilidade - Informações que pode ser entregue imediatamente ao solicitador. Todas as nossas informações estão armazenadas em algum local, hoje em dia quase tudo em computadores, agora imagine que se você precise de uma determinada informação e quando for acessá-la não consegue porque o servidor está indisponível, não podemos deixar que isso ocorra.

Autenticidade - Dados de confiança e Genuínos. Ao envirmos algum dado queremos ter certeza de enviar para o receptor correto e ao recebermos queremos ter certeza que foi enviado pelo emissor verdadeiro. Um exemplo é a troca de e-mails, devemos garantir a veracidade do emissor e receptor.

Legalidade - Garante a legalidade (jurídica) da informação; Aderência de um sistema à legislação; Característica das informações que possuem valor legal dentro de um processo de comunicação, onde todos os ativos estão de acordo com as cláusulas contratuais pactuadas ou a legislação política institucional, nacional ou internacional vigentes.

Assim podemos dizer que para se ter uma Segurança das informações na rede, esses aspectos citados acima tem que estar compridos arrisca para a segurança seja constante e plena.



Assim a assinatura digital garante a:

 Confidencialildade, porque esta cifrada e protegida por chaves digitais, se a mensagem for indevidamente interseptada não será possível ou muito difícil conhecer seu conteúdo

  Integridade, porque através da validação com hash e a chave eletrônica temos a confirmação de que o objeto está integro e não foi adulterado.

Autenticidade não permitindo o repúdio da autoria, isto é garante que o objeto e original que não foi alterado, e comprova a sua autoria, tornando o objeto 100% confiável, isso é possível através da assinatura digital com a chave privada que única



A assinatura e verificação de código funcionam da seguinte maneira. Além de escrever o código, o autor executa uma função de hash com o código como entrada, produzindo um resumo. O resumo é assinado com a chave privada do autor, produzindo a assinatura. O código, a assinatura e a função hash são entregues ao verificador. O verificador produz o resumo a partir do código usando a mesma função hash e, em seguida, usa a chave pública para descriptografar a assinatura. Se os dois resumos corresponderem, o verificador poderá ter certeza de que o código não foi violado.



Gerar o par de chaves:

Comando ssl para geração de chaves. ‘ ssh-keygen -t rsa ‘



edpes@criativo:~$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/edpes/.ssh/id_rsa): edpes_rsas

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in edpes_rsas.

Your public key has been saved in edpes_rsas.pub.

The key fingerprint is:

SHA256:rYY6ZOFLglYye7hSmyhgZZZ3jUi0zIblbnvnlG741dI edpes@criativo

The key's randomart image is:

+---[RSA 2048]----+

| .o |

| *.. |

| .o*. o |

| o *+o o o |

| .X..+. S . |

|o=o.* .. .. o |

|+ooB o..++ o E |

|+.o o..o=.. . |

|o .. o+ |

+----[SHA256]-----+




As chaves já foram geradas, a chave privada já esta no formato pem, agora precisamos converter a chave publica para o formato pem também;

O formato de arquivo padrão para o OpenSSL é o formato PEM. O formato PEM deve ser legível em ASCII e seguro para editores e documentos de texto ASCII. O formato PEM é um formato de contêiner e pode incluir certificados públicos ou cadeias de certificados, incluindo chave pública, chave privada e certificado raiz. Os arquivos PEM podem ser reconhecidos pelos cabeçalhos BEGIN e END. 

Para exportar uma chave pública no formato PEM, use o seguinte comando OpenSSL.


$ openssl rsa -in example_rsa -pubout -out public.key.pem

edpes@criativo:~$ openssl rsa -in edpes_rsas -pubout -out edpes_rsas.pub

Enter pass phrase for edpes_rsas:

writing RSA key




Já de posse das chaves podemos agora assinar e validar um texto plano um arquivo ou uma string. 

Para assinar o arquivo usamos o seguinte comando.


openssl dgst -sha256 -sign my_private.key -out Assinado.txt.sha256 objetoparaAssinar.txt
openssl enc -base64 -in objetoparaAssinar.txt -out objetoparaAssinar.txt.base64


Validar a asssinatura:

A verificação de assinatura garante que a assinatura corresponda ao código original. Se o código foi alterado (até mesmo a adição de um único caractere de nova linha), uma assinatura diferente será produzida e a verificação falhará.



A verificação da assinatura funciona na direção oposta. Para verificar se a assinatura está correta, você deve primeiro calcular o resumo usando o mesmo algoritmo que o autor. Em seguida, usando a chave pública, você descriptografa a assinatura do autor e verifica se os resumos correspondem.



Podemos decodificar e validar o objeto com o seguinte codigo



openssl enc -base64 -d -in objetoparaAssinar.txt.base64 -out sign.txt.sha256 
openssl dgst -sha256 -verify public.key.pem -signature sign.txt.sha256 codeToSign.txt

Com isso o ciclo esta completo, codificamos e assinamos sempre com a chave  Privada e decodificamos com a chave Pública.

segunda-feira, 4 de março de 2019

Inserção de dados com Linguagem C e MYSQL

Um código bem simples para elucidar uma inserção de dados com código C e  MYSQL.

#include
#include
#include
#include
#define servidor "Nome servidor" 
#define usuario "Usuário" 
#define senha "Senha" 
#define bd "Banco de dados"
//
main()
 { 
     MYSQL conexao; 
     mysql_init(&conexao); 
         if (mysql_real_connect(&conexao, servidor, usuario, senha, bd,0,NULL,0))
              {
              printf("Conectado com sucesso!n");
             mysql_query(&conexao,"INSERT INTO cliente(cpf, fone ) values('001247127-53', '11974837484');");  
             mysql_close(&conexao);     } 
        else 
         { 
          printf("Falha de conexaon"); 
          printf("Erro %d : %sn", mysql_errno(&conexao), mysql_error(&conexao));     }

          }

domingo, 3 de março de 2019

Trocar a Senha do Chaveiro - redefinir a senha.

Como redefinir a senha do chaveiro da sessão, no debian & Ubunto / Likes.

E comum ao abrirmos um programa especialmente o Chrome, e logo aparecer a  intermitente tela pedindo a senha do chaveiro, mas isso é uma coisa fácil de se contornar, ao contrário de se excluir o keyrings do sistema, o que uma prática muito radical e muitas vezes o chrome vai deixar de funcionar, então é mais aconselhável se redefinir a senha, isso torna a segurança mais robusta, principalmente para quem usa todos os aplicativos do chrome limitando o acesso a esses dados, então é muito interessante e aconselhável definir uma senha para oa chaveiro de sessão.

Isso é até bem simples:
Precisamos saber onde se encontra a tal senha. isso se faz com o comando
 sudo  find -name keyrings, mas primeiro e preciso acessar o diretorio / com cd /.
o resultado sera parecido com :

edson@criativo:/$ sudo  find -name keyrings
./home/user/.local/share/keyrings
./home/edson/.local/share/keyrings  --->>> este é o diretorio do usuario logado no caso será o seu.
./var/lib/apt/keyrings
./etc/skel/.local/share/keyrings
./usr/share/keyrings

Agora e so acessar o diretorio ./home/edson/.local/share/keyrings    este é o diretorio do usuario logado no caso será o seu tipo assim  ./home/seunome/.local/share/Keyrings.
para acessar o diretorio usar o camndo cd  ./home/edson/.local/share/keyrings e depois um ls.

edson@criativo:~$ cd /./home/edson/.local/share/keyrings
edson@criativo:~/.local/share/keyrings$ ls
Chaveiro_predefinido.keyring  default  user.keystore login.keyring

Agora precisamos remover os arquivos com .keyring :

sudo rm -r  *.keyring

Pronto feche o chrome e abra-o novamente. agora o sistema esta pedindo para você definir uma nova senha e só digiar a senha confiramar e sua senha estará redefinida, guarde para não esquecer caso esqueça e só repetir os passos acima. defina sempre com uma senho forte senha fraca não serve para nada.

PS:

Também e possível redefinir as senhas com o APP   seahorse :


Caso não esteja instalado --> sudo apt install seahorse.
No menu estara em  Acessórios  Senhas e Palaras Chaves.

Qualquer  dúvida deixe seu comentário ou pelo meu email.

Ok INTE!!




Compilando um programa em C

Compilando. Em GNU/Linux, usamos o compilador gcc para compilar arquivos em C. O gcc é um compilador que pode ser rodado a partir de um ...