Login:

iMasters | Por uma internet mais criativa e dinâmica

Feeds

Sexta-feira, 06/10/2006 - 12:12 - Por Mauricio Reckziegel
Seções relacionadas:

Criptografia em PHP e WebServices

Antes de ler esta matéria, conheça o programa de treinamentos avançados do iMasters:

Olá pessoal. Tempo raro este, torna difícil postar novas matérias, mas vamos lá!

Como já vimos, os Web Services utilizam-se do protocolo SOAP para o transporte das mensagens, estas, em XML. Porém, o SOAP não se preocupa nem um pouco com a segurança das informações, muito menos se ela chegou no seu determinado destino. Como visto na matéria SOAP, é um protocolo simples, muito mais que outros protocolos distribuídos.

Segurança

Os principais desafios para a construção de uma arquitetura segura são:

01. Quanto à integridade e confidencialidade, garantindo que os dados transmitidos pelo protocolo SOAP não sejam alterados indevidamente e não possam ser acessados durante o seu transporte por entidades não autorizadas.

02. Quanto à autenticação e autorização, garantindo a identidade da fonte das informações e os acessos aos métodos realizados com a devida permissão dos responsáveis.

03. E, por fim, a análise do conteúdo, garantindo que o conteúdo das mensagens trocadas esteja adequado e que não causará danos ao receptor.

Devido ao uso do protocolo SOAP em sua comunicação, o qual utiliza-se de XML em suas mensagens, ou seja, um arquivo texto perfeitamente legível, onde devemos sem dúvida nenhuma nos precaver e investir na segurança da transmissão dos dados e na autenticação de quem usufrui dos mesmos.

Solução

A idéia desta matéria é construir uma camada simples de criptografia, utilizando-se do OpenSSL para a mesma. Vou criar uma classe e dar um exemplo, tanto para chaves simétricas tanto quanto para chaves assimétricas. Sabem a diferença? Bom, vamos ao começo então.

Criptografia

Segundo HENDRICKS, “A criptografia é a ciência que trata da preservação dos dados privados”. Nada mais é que um texto cifrado, criptografar é o ato de cifrar um determinado texto e decriptografar é fazer o inverso.

Hoje em dia, temos algoritmos capazes de controlar esses processos, através de chaves de criptografia. Existem duas classes desses algoritmos criptográficos baseados em chave:

. Simétricas (chave secreta): Utilizam-se da mesma chave para criptografia e decriptografia

São geralmente muito mais rápidos quando referidos a execução, se comparados aos algoritmos assimétricos, devido às chaves públicas assimétricas serem muito mais extensas.

. Assimétrica (chave pública): utiliza-se de chaves diferentes para a criptografia e para a decriptografia.

As chaves de criptografia assimétricas se tornam um grande aliado quando falamos em segurança dos Web Services. Esta forma de criptografia utiliza uma chave pública relacionada matematicamente à chave privada. Com isso, apenas o dono do par de chaves conhece a chave privada, enquanto a chave pública pode ser livremente distribuída.

Caso queiram saber mais sobre as chaves, favor comentar abaixo da matéria que posso futuramente montar um artigo apenas sobre como são geradas as chaves e toda a questão matemática envolvida e o porquê as chaves assimétricas são tão seguras.

Vamos à Prática

Pessoal, precisamos da extensions OPENSSL no PHP rodando mod_openssl e o OpenSSL instalado.

Para o WINDOWS, recomendo que leiam a matéria Instalando SSL no Apache2 em ambiente Windows do meu colega Leonardo Calado, aqui do iMasters mesmo, muito boa por sinal.

Ensina também a gerar certificados, porém não é necessário para o nosso caso neste primeiro momento, apenas a instalação do OPENSSL em sua máquina.

Criptografia no PHP

Chave Simétrica (clique na imagem para abrir o código em tamanho maior)

Código

Resultado

Chaves Assimétricas

As chaves assimétricas seguem mais ou menos o mesmo padrão, porém a criptografia é feita através da chave pública, que pode ser enviada pela rede e decriptografada com a chave privada.

Devido ao tamanho dos fontes, estarão apenas disponíveis para download abaixo da matéria, abaixo apenas o resultado.

Resultado

Criptografia em WebServices via PHP

Vamos utilizar os mesmos fontes de um outro artigo: Utilizando Web Services em PHP.

Criamos o cliente.php

Linha 11: Passamos a chave simétrica.
Linha 13: Criamos uma função para simplificar o processo de decriptografia.
Linha 31: Acionamos a decriptografia em cima do $result.

No server.php:

Linha 19: Incluimos a classe de criptografia simétrica.
Linha 20: Instanciamos ela.
Linha 23: Passamos a chave simétrica (poderiamos gerar uma nova, mas ela precisa ser identica a chave do cliente).
Linha 25: Seta a chave na classe.
Linha 26: Seta o texto a ser criptografado.
Linha 27: Criptogra o texto.
Linha 28: Pega o texto de forma hexadecimal (É necessário para que os dados circulem no protocolo SOAP).

Resultado

Mensagem de Resposta do SOAP

Resposta
HTTP/1.1 200 OK
Date: Wed, 27 Sep 2006 18:59:46 GMT
Server: Apache/2.0.59 (Win32) mod_ssl/2.0.52 OpenSSL/0.9.8 PHP/5.1.4
X-Powered-By: PHP/5.1.4
X-SOAP-Server: NuSOAP/0.7.2 (1.94)
Content-Length: 552
Connection: close
Content-Type: text/xml; charset=ISO-8859-1

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:helloResponse xmlns:ns1="http://tempuri.org"><return xsi:type="xsd:string">aKV17SE6pL6WnkW/FhFcKw4X1LtqHeMdW+e3nr4rLtc=
</return>
</ns1:helloResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>

Como podem ver, a mensagem voltou criptografada.

Podemos fazer o mesmo procedimento utilizando-se das chaves assimétricas, podendo enviar a chave pública junto a mensagem.

Ex.: O cliente passa os paramentos nome e a chave pública, o servidor recebe, gera a mensagem e criptografa com a chave pública recebi e retorna a mensagem para o cliente, que utiliza-se da chave privada para decriptografar a mensagem.

Porém o envio das chaves se torna um processo um tanto quanto "pesado".

Uma saída seria utilizar as chaves assimétricas para a transmissão de chaves simétricas. Ou seja, criptografa-se uma chave simétrica utilizando-se a chave pública assimétrica para uma troca segura de chaves, a partir daí utiliza-se as chaves simétricas entre 2 pontos para uma comunicação segura.

Bom, era isso pessoal, simples e objetivo.

Qualquer dúvida estamos ai.

Abraço.

Todos os artigos de Mauricio Reckziegel

4 comentários publicados

  • 1. Fontes

    Sexta-feira, 06/10/2006, por Mauricio Reckziegel

    Fontes aqui -> http://conteudo.imasters.com.br/4802/coluna 8 - criptografia.zip

    Responder comentário
  • 2. Mto bom!

    Domingo, 08/10/2006, por Leonardo Paula

    Opa! blz?
    Gostei muito da sua matéria... muito interessante mesmo!

    Eu pessoalmente gostaria de saber mais sobre os tipos de chaves, e os algoritmos que são utilizados... vamos ver o que o pessoal acha...

    Mais uma vez muito bom!
    Abraço!

    Responder comentário
  • 3. Essencial, fundamental e tão esquecida

    Sexta-feira, 02/02/2007, por Tiago Gouvêa

    A segurança deve ser vista como ponto primordial nos projetos Web de atualmente. O que vemos são sistemas e páginas repletos de brechas.. no caso de WebServices e Ajax então, a preocupação deve ser muito maior.
    Ótimo artigo !
    Saudações !

    Responder comentário
  • 4. Messagem número 14

    Quarta-feira, 09/05/2007, por Ancele Marcos

    Alguém sabe o que significa, quando o nusoap retorna apenas o número 14 como resultado de uma chamada a um webservice? Espero que alguém possa me ajudar.

    Obrigado.

    Responder comentário

Poste um comentário


Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.

Sobre o autor

Mauricio Reckziegel é programador há 4 anos e desenvolve sistemas para web especificamente, trabalhando mais com a linguagem PHP. Estudante de Sistemas de Informações na Universidade Regional do Noroeste do Estado do Rio Grande do Sul, Unijui - Campus Santa Rosa e, no momento, desenvolve a monografia em cima da arquitetura WebServices.


Indique para um amigo

captcha

TI SHOP Produtos iMasters

  • DVD Curso Completo de Photoshop - Do conceito à finalização Lançamento! Curso Completo de Photoshop, em DVD, com mais de 230 aulas dividas em 4 módulos: conceito, básico, avançado e finalização. Apenas R$ 59,90 no TI SHOP - Frete com 50% de desconto!
  • DVD Profissão: WebDesigner Curso exclusivo do autor Bruno Ávila, onde mostra como deve ser a formação e atuação do webdesigner no mercado profissional. Apenas R$ 39,50 no TI SHOP - Frete com 50% de desconto!
  • DVD Javascript Starter - Curso Completo Com mais de 9 horas de vídeo-aulas, é um curso completo sobre Javascript. Ideal para quem deseja aprender a linguagem. Apenas R$ 54,90 no TI SHOP - Frete com 50% de desconto!
  • CD-ROM DW + PHP + MySQL - Curso Avançado - 2ª Edição Curso avançado de interação Dreamweaver, PHP e MySQL, em CD-ROM, com mais de 80 tópicos, 50 aulas em vídeo e projeto final. Apenas R$ 59,90 no TI SHOP - Frete com 50% de desconto!

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.