Computação Confiável (Trustworthy Computing)

Craig Mundie – Senior Vice President and CTO, Advanced Strategies and Policy

Pierre de Vries

Peter Haynes

Matt Corwine

Microsoft Corporation


Microsoft White Paper

Maio de 2002

O texto abaixo é uma versão revisada do documento sobre Trustworthy Computing que nós publicamos em Janeiro de 2002. Ele representa a nossa síntese da vasta quantidade de informação valiosa que nós recebemos sobre o assunto desde que o documento original foi lançado. Para todos aqueles que ofereceram seus pensamentos e ajuda: muito obrigado.

Porque Confiar?

Embora muitas tecnologias que fazem uso da computação tenham se provado extremamente confiáveis – computadores ajudaram a transportar pessoas para a lua e as trouxeram de volta, eles controlam sistemas aéreos críticos para milhões de vôos a cada ano e movem trilhões de dólares no mundo todo diariamente – de uma forma geral elas não atingiram o ponto no qual as pessoas se sentem confortáveis em confiar a elas suas vidas, implicitamente ou explicitamente. Muitas pessoas estão relutantes em confiar aos sistemas de computador atuais suas informações pessoais, tais como registros financeiros e médicos, pois estão cada vez mais preocupadas com a segurança e a confiabilidade destes sistemas, que elas enxergam como oferecendo um risco social significativo. Se nós realmente desejamos que a computação esteja verdadeiramente em todos os lugares – e atenda a imensa promessa da tecnologia – nós teremos que tornar o ecossistema computacional suficientemente "Confiável" (em que se pode confiar) para que as pessoas não se preocupem com sua falibilidade ou falta de confiabilidade da forma como elas se preocupam atualmente.

Confiança é um conceito amplo, e tornar alguma coisa confiável requer uma infra-estrutura social além de sólida engenharia. Todos os sistemas falham de tempos em tempos; as práticas legais e comerciais nas quais eles estão embutidos podem compensar pelo fato de que nenhuma tecnologia jamais será perfeita.

Portanto isto não é apenas um esforço para tornar o software confiável; como os computadores de alguma forma já perderam a confiança das pessoas, nós teremos que superar um legado de máquinas que falham, software que falha e sistemas que falham. Nós teremos que persuadir as pessoas de que o sistema, o software, os serviços, as pessoas e as empresas atingiram coletivamente um novo nível de disponibilidade, fidelidade e confidencialidade. Nós teremos que superar desconfiança que as pessoas agora sentem em relação aos computadores.

A iniciativa Trustworthy Computing é um rótulo para uma ampla gama de avanços que têm que ser feitos para que as pessoas se sintam tão confortáveis usando dispositivos controlados por computadores e software como elas se sentem atualmente usando um dispositivo controlado por eletricidade. Pode ser que demoremos de dez a 15 anos para chegar lá, tanto como uma indústria quanto uma sociedade.

Isto é uma “transformação” não somente na forma como nós escrevemos e entregamos software, mas também na forma pela qual a sociedade enxerga a computação em geral. Há problemas imediatos a serem resolvidos, e questões de pesquisa fundamentais abertas. Há ações que os indivíduos e as empresas deveriam tomar, mas também há problemas que só podem ser resolvidos coletivamente por consórcio, comunidade de pesquisa, nações e o mundo como um todo.

Estabelecendo o Cenário

Histórico

A sociedade passou por várias grandes mudanças tecnológicas que modelaram a cultura: a revolução agrária, a invenção do trabalho com metal, a revolução industrial, o advento da eletricidade, telefonia e televisão – e, é claro, o microprocessador que tornou a computação pessoal uma realidade. Cada uma destas mudanças transformou fundamentalmente a forma como bilhões de pessoas vivem, trabalham, se comunicam e se divertem.

Até agora a computação pessoal só foi realmente implantada no âmbito profissional no mundo desenvolvido. (Grandes sistemas de computador também revolucionaram o processo de manufatura). Entretanto, a melhoria continuada na tecnologia e diminuição nos custos significa que a tecnologia da computação pessoal irá se tornar por fim um componente básico na vida pessoal e profissional de cada pessoa, e não apenas para os profissionais.

O progresso na computação no último quarto de século é parecido com as primeiras poucas décadas da energia elétrica. A eletricidade foi adotada em primeiro lugar na década de 80 por pequenas empresas de trabalho intensivo que podiam alavancar a natureza fracionária da tecnologia para aumentar a produtividade de manufatura (isto é, uma simples fonte de energia conseguia manter vários motores elétricos em uma fábrica). Na sua infância, a eletricidade nas casas era um luxo caro, usado por ambientes domésticos com alta renda familiar para a luz elétrica. Também havia grande incerteza com relação à segurança da eletricidade em geral e equipamentos em particular. A eletricidade estava associada aos raios, uma força natural letal e não havia garantias de que equipamentos padrões não matariam seus proprietários.

Entre 1900 e 1920 tudo mudou. Moradores de cidade e os subúrbios de rápido crescimento tinham cada vez mais acesso a uma gama de tecnologias de energia e a concorrência entre o gás e o petróleo diminuiu o preço da eletricidade. Um número crescente de dispositivos elétricos que economizavam trabalho, tais como aspiradores de pó e refrigeradores, significava que os ambientes domésticos estavam cada vez mais dependentes da eletricidade. Campanhas de marketing feitas por empresas de eletricidade e a emergência de máquinas padrões (por exemplo, Underwriters’ Laboratories (UL) nos Estados Unidos) aplacaram o medo dos consumidores. A tecnologia não era totalmente segura e confiável, mas em algum momento do início do século XX, ela se tornou segura e confiável o suficiente.

No espaço computacional, nós ainda não atingimos este estágio; nós ainda estamos no estágio equivalente à era industrial do século XIX da eletricidade. A computação tem ainda que atingir e melhorar cada faceta de nossas vidas – mas ela o fará. É difícil prever em detalhes o impacto eventual que a computação terá, da mesma forma como era difícil antecipar as conseqüências da eletricidade, água, gasolina, telecomunicações, viagens aéreas ou qualquer outra inovação. Um passo importante para levar a computação até o ponto no qual as pessoas ficariam tão felizes por ter um microprocessador em cada dispositivo como o quanto elas se apóiam em eletricidade será atingir o mesmo grau de confiabilidade relativa. “Relativa”, pois 100% de confiabilidade jamais será atingido por qualquer tecnologia – fontes de energia elétrica explodem e falham, canos de água e gás se rompem, linhas telefônicas saem do ar, aviões caem e assim por diante.

Tecnologias Confiáveis em Geral

Todas as tecnologias amplamente adotadas – como a eletricidade, automóveis ou telefones – tornaram-se partes confiáveis de nossas vidas diárias, pois elas estão quase sempre lá quando nós precisamos delas, fazem o que nós precisamos que elas façam e funcionam conforme anunciado.

Quase qualquer pessoa no mundo desenvolvido pode comprar um novo aparelho telefônico e conectá-lo à linha telefônica sem se preocupar se ele irá ou não funcionar. Nós simplesmente assumimos que nós obteremos um tom de discagem ao pegarmos o telefone e que conseguiremos ouvir a outra parte quando a conexão for concluída. Nós assumimos que nem nossos vizinhos nem o corretor de seguros mais à frente na rua conseguirão ouvir nossa conversação ou saber para quem nós ligamos. E geralmente nós assumimos que a companhia telefônica proporcionará e cobrará por seu serviço conforme prometido. Uma combinação de engenharia, prática de negócio e regulamentação resultou em pessoas confiando no serviço telefônico.

odemos abstrair três fases amplas de expectativas que os usuários têm com relação a qualquer tecnologia confiável: segurança, confiabilidade e integridade de negócios (isto é, a integridade da organização que oferece a tecnologia). Estas categorias, e suas implicações para a computação, são discutidas em mais detalhes abaixo.

Trustworthy Computing

Dispositivos computacionais e serviços de informação somente estarão em todos os lugares quando se tornarem tão indispensáveis que nós até esqueceremos que eles existem. Em outras palavras, no momento em que os computadores estão começando a entrar em cada aspecto de nossas vidas, nós temos que poder confiar neles. Ainda assim, a forma como nós construímos computadores e a forma como nós agora construímos os serviços em torno destes computadores na verdade ainda não mudou muito nos últimos 30 ou 40 anos. Isto terá que mudar.>

Um Framework para a Computação Confiável

Nós não conseguimos encontrar uma taxonomia existente que pudesse proporcionar um framework para a discussão sobre computação confiável. Não há falta de iniciativa na área de confiança, mas o foco de cada uma delas é bem estreito. Por exemplo, há tratamentos de confiança em transações de comércio eletrônico e confiança entre sistemas de autenticação, além de análises das percepções públicas da computação, mas uma abordagem verdadeiramente efetiva precisa entregar engenharia, política e atitude do usuário. Mesmo somente no lado da engenharia, nosso escopo é maior do que, digamos, os modelos SysTrust/SAS70, que lidam puramente com grandes sistemas on-line.

Primeiro há as próprias máquinas. Elas precisam ser confiáveis o suficiente para que nós a incluamos em todos os tipos de dispositivos – em outras palavras, elas não deveriam falhar como maior freqüência do que as das outras tecnologias também importantes em nossas vidas. Depois, há o software que opera estas máquinas: as pessoas acreditam que ele é igualmente confiável? E, finalmente, há os componentes de serviço, que também são largamente dependentes do software. Este é um problema particularmente complicado, pois atualmente nós temos que construir fidelidade em um sistema ponto a ponto, ricamente interconectado (e algumas vezes confederado).

Como confiança é um conceito complexo, é útil analisar o objetivo da computação confiável a partir de várias perspectivas diferentes. Nós definimos três dimensões nas quais descrever diferentes perspectivas sobre confiança: Objetivos, Meios e Execução.


Objetivos

A dimensão Objetivosconsidera confiança do ponto de vista do usuário. As principais questões são: A tecnologia estará lá quando eu precisar dela? Ela mantém minha informação confidencial segura? Ela faz o que tem que fazer? E as pessoas que possuem e operam a empresa que proporciona serviços sempre fazem a coisa certa? Estes são os objetivos que qualquer computação confiável tem que atender:

ObjetivosA base para a decisão de um cliente confiar em um sistema

Segurança

A informação e as transações de um cliente são privadas e estão seguras.

Confiabilidade

O cliente pode depender do produto para atender suas funções quando exigido.

Integridade de Negócio

O fornecedor de um produto se comporta de uma forma responsiva e responsável.

Os Objetivos de confiança cobrem expectativas racionais de performance – isto é, aquelas que são facilmente influenciáveis pelas soluções de tecnologias e engenharia – e as variações mais subjetivas de comportamento que são resultado da reputação, preconceito, palavra e experiência pessoal. Todos estes objetivos fazem surgir tópicos sobre engenharia, práticas de negócio e percepções públicas, embora nem todos no mesmo grau. Para clarificar os termos, eis aqui alguns exemplos para os Objetivos:

Segurança: Minha informação pessoal não é divulgada de forma não autorizada. Um vírus não infecta e destrói meu PC. O invasor não pode se apoderar do meu sistema tornando-o inutilizável ou fazer alterações não autorizadas nos meus dados.

Confiabilidade: Ao instalar novo software, eu não tenho que me preocupar se ele funcionará adequadamente com as aplicações existentes. Eu posso ler meu e-mail sempre que eu quiser clicando no link Hotmail em msn.com. Eu nunca obtenho mensagens “sistemas indisponível”. A Agenda não perde todos os meus compromissos repentinamente.

Integridade de Negócios: Meu provedor de serviço responde com rapidez e efetividade quando eu relato um problema.

Meios

Com os objetivos estabelecidos nós podemos olhar o problema do ponto de vista da indústria. Os Meios são as considerações de negócio e engenharia que são usadas para atingir os Objetivos; eles são o pão com manteiga de um serviço confiável. Embora os Objetivos sejam largamente orientados para o usuário final, os Meios são considerações intra-empresa encaradas internamente. Pense nos Objetivos como o que é entregue e nos Meios em como.

MeiosAs considerações de negócio e engenharia que habilitam um fornecedor de sistema a entregar os Objetivos

Segurança

Foram tomadas ações para proteger a confidencialidade, integridade e disponibilidade dos dados e sistemas.

Privacidade

Dados do usuário final nunca são coletados e compartilhados com pessoas ou organizações sem o consentimento do indivíduo. A privacidade é respeitada quando a informação é coletada, armazenada e usada de forma consistente com as Fair Information Practices.

Disponibilidade

O sistema está presente e disponível para uso conforme requisitado.

Gerenciamento

O sistema é fácil de instalar e gerenciar, de acordo com o seu tamanho e complexidade. (escalabilidade, eficiência e relação custo-efetividade são consideradas como parte do gerenciamento).

Precisão

O sistema efetua suas funções corretamente. O resultado dos cálculos não contém erros e os dados são protegidos contra perda ou dano.

Usabilidade

O software é fácil de usar e adequado às necessidades do usuário.

Responsividade

A empresa se responsabiliza pelos problemas e faz algo para corrigi-los. É proporcionado ajuda aos consumidores no planejamento, instalação e operação do produto.

Transparência

A empresa é aberta nos seus negócios com os clientes. Seus motivos são claros, ela mantém sua palavra e os clientes sabem qual é o seu papel em uma transação ou interação com a empresa.

Alguns Exemplos:

Segurança: Uma arquitetura deve ser projetada para usar encriptação triple-DES para dados sensíveis tais como senhas antes de armazená-los em um banco de dados e usar o protocolo SSL para transportar dados pela Internet.

Privacidade: Tecnologias e padrões tais como P3P dão aos usuários ciência e controle de como seus dados são coletados e usados. Ao mesmo tempo, a Microsoft estabeleceu princípios de privacidades claros e um conjunto de políticas que guiam seu comportamento.

Disponibilidade: O sistema operacional é escolhido para maximizar o MTBF (Mean Time Between Failures – Tempo Entre Falhas). Serviços possuem objetivos de performance, políticas e padrões definidos e comunicados para disponibilidade do sistema.

Gerenciamento: O sistema é projetado para ser tão autogerenciado quanto possível. Correções e atualizações de software podem ser instaladas com intervenção mínima do usuário.

Precisão: O projeto de um sistema possui vetores RAID, redundância suficiente e outros meios para reduzir danos ou perda de dados.

Usabilidade: A interface do usuário não é poluída e é intuitiva. Alertas e caixas de diálogos são úteis e utilizam palavras apropriadas.

Responsividade: Verificações de garantia de qualidade ocorrem desde o inicio de um projeto. O gerenciamento torna claro que a confiabilidade e confiança têm precedência sobre riqueza de recursos ou data de lançamento. Os serviços são constantemente monitorados e sempre é tomada alguma ação quando a performance não atende os objetivos estabelecidos.

Transparência: Contratos entre as empresas são acordos ganha ganha, e não uma oportunidade para extrair o máximo possível de receita de uma parte em curto prazo. A empresa se comunica claramente e honestamente com todos os seus acionistas.

Execução

Execução é a forma que uma organização conduz suas operações para entregar os componentes necessários para a Trustworthing Computing. Há três aspectos a considerar: Intenções, Implementação e Evidência. Intenções são a orientação corporativa e legislativa que define requisitos para o projeto, implementação e suporte ao produto. Implementação é o processo de negócio que operacionaliza as Intenções. Evidência é o mecanismo pelo qual nós verificamos se a Implementação entregou a Intenção. Alguns exemplos:

Intenções

Políticas da empresa, diretivas, benchmarks, diretrizes

Contratos e negociações com clientes, incluindo Service Level Agreements (SLAs)

Padrões corporativos, da indústria e regulatórios

Legislação governamental, políticas e regulamentos.

Implementação

Análise de risco

Práticas de desenvolvimento, incluindo arquitetura, codificação, documentação e teste

Treinamento e educação

Termos de negócio

Práticas de marketing e vendas

Práticas de operações, incluindo implantação, manutenção, vendas/suporte e administração de risco

Reforço de intenções e resolução de disputa

Evidência

Auto-avaliação

Acreditação por terceiros

Auditoria externa

Este problema só pode ser resolvido com o trabalho em duas frentes paralelas.

O primeiro caminho são os problemas imediatos – com os quais as pessoas se preocupam no dia a dia. Nós temos que endereçar problemas correntes conhecidos e diminuir as fraquezas conhecidas atualmente. Conhecer os problemas mais fundamentais também é um caminho. Nós temos que estar tão informados quanto possível sobre o que realmente está acontecendo e o que nós podemos e não podemos corrigir considerando as restrições dos sistemas correntes.

Parte do motivo originador da ansiedade do cliente é que computadores pessoais agora estão entrando em áreas com as quais eles não se preocupavam anteriormente. Será mais fácil se concentrar em áreas como finanças ou serviços bancários onde tais problemas são bem conhecidos e já existem há muito tempo.

Embora haja muito trabalho a ser feito através de melhoria incremental dos sistemas correntes, estes esforços não resolverão os problemas fundamentais, alguns dos quais são descritos na próxima seção.

A indústria dos computadores precisa identificar e resolver os desafios mais críticos, e formatar soluções de uma maneira incremental nos enormes sistemas legados que foram construídos. Haverá um longo ciclo de substituição tecnológica durante o qual os sistemas de infra-estrutura crítica dos quais a sociedade depende serão gradualmente atualizados para um status novo e melhorado. Dado que estes sistemas já existem, as pessoas não vão simplesmente jogá-los pela janela e começar desde o principio novamente. Portanto nós temos que identificar os pontos fracos dos sistemas e da infra-estrutura crítica e atualizá-los de acordo com a mais alta prioridade e garantir que novas infra-estrutura serão construídas sobre princípios bem embasados.

Problemas Fundamentais

Política

Uma vez que uma tecnologia tenha se tornado uma parte integral e como a sociedade opera, esta sociedade estará mais envolvida na sua evolução e gerenciamento. Isto tem acontecido em estradas de ferro, telecomunicações, TV, energia, etc. A sociedade somente agora está percebendo de que ela está dependendo criticamente dos computadores.

Nós estamos entrando em uma era de tensão entre a energia empreendedora que leva à inovação e a necessidade da sociedade de regular um recurso crítico independente do risco de sufocar a concorrência e a capacidade de invenção. Isto é exacerbado pelo fato de que as normas sociais e seus frameworks legais associados mudam de forma mais lenta do que as tecnologias. As indústrias dos computadores devem encontrar o balanceamento apropriado entre a necessidade por um regime regulatório e os impulsos de uma indústria que cresceu sem regulamentação e se apóia em padrões de fato.

Muitos problemas de confiabilidade de infra-estrutura contemporâneos são na verdade problemas políticos. O estado da crise recente de fornecimento de eletricidade da Califórnia foi alavancado em grande parte por uma privatização mal feita. A pobre cobertura e serviço dos provedores de serviço celular dos Estados Unidos é devida em parte à política da FCC de não conceder licenças para todo o território nacional. Estas questões políticas freqüentemente cruzam barreiras nacionais, conforme ilustrado pela luta para estabelecer padrões globais para tecnologias celulares de terceira geração. Usuários existentes do espectro (freqüentemente os militares) ocupam bandas diferentes em paises diferentes, e resistem em cedê-las, tornando difícil encontrar um espectro comum no mundo todo.

Processamento

Complexidade

Nós estamos vendo o advento de sistemas ocupacionais de mega escala construídos a partir de fracos agrupamentos de serviços, máquinas e software de aplicação. O comportamento emergente (e bem diferente) de sistemas como estes é um risco crescente de longo prazo.

Uma arquitetura construída sobre diversidade é robusta, mas também opera no limite do caos. Isto também é verdade para todos os sistemas de escala bastante alta, de sistemas naturais como o tempo a sistemas feitos pelo homem como o mercado e a rede elétrica. Todos os sistemas de mega escala anteriores que nós construímos – a rede elétrica, os sistemas telefônicos – experimentaram comportamento emergente imprevisível. É por isso que em 1965 a rede elétrica falhou e derrubou toda a Costa Leste dos Estados Unidos, e é por isso que cidades inteiras ocasionalmente ficam sem a rede telefônica quando alguém implementa uma correção de erro em um único comutador. A complexidade do sistema ultrapassou a habilidade de qualquer pessoa – ou qualquer entidade – entender todas as interações.

Sistemas de computador inacreditavelmente seguros e confiáveis existem atualmente, mas eles são sistemas altamente independentes de propósito único que são meticulosamente projetados e então isolados. Nós realmente não sabemos o que vai acontecer conforme nós unimos dinamicamente bilhões – talvez até trilhões – de dispositivos inteligentes e interdependentes que se espalham por muitos tipos e gerações diferentes de software e arquitetura.

Conforme o poder dos computadores aumenta, tanto em armazenamento quanto em capacidade computacional, a escala absoluta e a complexidade do software que o suporta crescem na mesma escala. Isto se manifesta de várias formas, variando de como você administra estas máquinas a como você percebe que elas estão quebradas, como você as conserta e como você inclui mais capacidade. Todos estes aspectos influenciam em como as pessoas percebem o sistema como sendo confiável ou não.

Hardware, Redundância

Nós ainda não possuímos mecanismos econômicos amplamente usados realmente bons para construir hardware ultraconfiável. Entretanto, nós possuímos um ambiente onde pode se tornar um lugar comum ter 200 milhões ou mais de transistores em um único chip. Em algum momento passa a valer a pena fazer isto com quatro sistemas paralelos que são redundantes e, portanto mais resistentes à falhas. O custo marginal de ter esta redundância em um único componente pode ser aceitável. De forma similar, o fabricante de computador ou usuário final pode decidir instalar dois discos rígidos menores para espelhar seus dados, melhorando bastante sua integridade no caso de uma falha do disco.

Nós podemos ter novas abordagens arquiteturais para sobrevivência nestes sistemas de computador nos dias de hoje, mas sempre provenientes da redundância. Isto significa que você tem que comprar esta redundância. Desta forma as pessoas terão, na verdade, novamente que decidir: elas querem economizar dinheiro, mas lidar potencialmente com mais falha? Ou elas estão dispostas a gastar mais dinheiro ou lidar com complexidade e sobrecarga administrativa para poder resolver os aspectos apropriados de segurança, privacidade e suficiência tecnológica que resolverão estes problemas?

Processos Máquina para Máquina

O modelo de Serviços Web é caracterizado pela computação no limite da rede. Aplicações ponto a ponto serão a regra e haverá processamentos distribuídos. Um regime administrativo para um sistema como este requer processos sofisticados máquina para máquina. Os dados serão autodescritores. As máquinas serão fracamente ligadas, autoconfiguradas e auto-organizadas. Elas administrarão a si próprias para estarem em conformidade com um conjunto de políticas no centro.

Aplicações Web terão que ser projetadas para operar em um mundo assíncrono. No paradigma PC, uma máquina sabe onde estão seus periféricos; as associações foram estabelecidas (pelo usuário ou pelo software) em algum momento do passado. Quando alguma coisa interrompe esta sincronicidade, o software algumas vezes simplesmente trava ou morre. Suporte aprimorado a dispositivo plug-and-play no Windows XP e arquiteturas “hot-pluggable” tais como USB e IEEE 1394 apontam em direção a um PC verdadeiramente “assíncrono”, mas estas dependências ainda existem algumas vezes.

Na Web, entretanto, os dispositivos vêm e vão e a latência é altamente variável. Arquiteturas Web robustas precisam de capacidades de descoberta dinâmica e de configuração automática. Se você aceita a idéia de que tudo é fracamente ligado e assíncrono, você introduz ainda mais oportunidade de falha. Para cada interação potencial, você tem que assimilar a idéia de que ela poderá não ocorrer na verdade, pois a Web é somente um mecanismo de “melhor esforço” – se você clica e não obtém nenhum resultado, você clica novamente. Cada sistema computacional portanto tem que ser reprojetado para se recuperar de interações que falham.

Identidade

Questões de identidade algumas vezes surgem no contexto da computação confiável. A identidade não é explicitamente obtida do framework, pois um usuário não espera que um sistema de computador gere sua identidade. Entretanto, a identidade do usuário é um conceito central sobre o qual serviços são proporcionados. Asserções de identidade (isto é autenticação) têm que ser robustas, para que as ações que dependem da identidade (isto é autenticação) possam ser tomadas de forma confiável. Desta forma, os usuários esperam que suas identidades estejam protegidas de um uso indesejado.

É difícil definir identidade em geral, mas particularmente no mundo digital. Nós usamos a definição de trabalho de que identidade é o aspecto persistente coletivo de um conjunto de características distintas através do qual uma pessoa (ou coisa) pode ser reconhecida ou aceita. Identidade é algo difuso independente de contexto, pois estes aspectos “fragmentados” estão armazenados em todos os lugares na forma digital, física e emocional. Parte desta identidade é “possuída” pelo usuário, mas grande parte dela é conferida por outros, legalmente (por exemplo, por governos ou empresas) ou por um reconhecimento social informal.

Muitos elementos dos sistemas computacionais confiáveis invadem a identidade. Os usuários se preocupam com a privacidade dos sistemas de computador em parte porque eles percebem que aspectos não relacionados da sua identidade podem ser montados novamente de forma mais fácil quando os fragmentos estão na forma digital. A maior evidência deste fato é o crescente medo do público em geral com relação à fraude de cartão de crédito e roubo de identidade como um resultado da relativa transparência e anonimato da Internet versus transações offline, mesmo que os dois crimes sejam igualmente possíveis no mundo físico. Os usuários esperam que as informações sobre eles próprios, incluindo os aspectos que formam a identidade, não sejam liberados de formas não aprovadas.

Pessoas

Já é desafiador gerenciar redes extremamente grandes de computadores, e isto está se tornando cada vez mais difícil. A imensidão deste desafio tem sido mascarada pelo fato de que até o momento nós contratamos profissionais para gerenciar grandes sistemas. Os problemas das máquinas, redes, administração, ferramentas e as próprias aplicações são sempre atenuados por gerentes de sistemas com talento trabalhando pesado para compensar o fato de que estes componentes nem sempre funcionam conforme esperado ou desejado.

Grande parte das falhas de sistema que atraem bastante atenção acontecem devido à complexidade do sistema. As pessoas cometem um erro administrativo, falham e não instalam o patch, ou configuram um firewall incorretamente e uma simples falha acaba gerando uma falha maior catastrófica. Há uma dependência muito forte dos operadores humanos fazendo a coisa certa, dia após dia.

Já há poucos administradores com conhecimento e nós estamos perdendo o terreno. Pior ainda, as necessidades de administração estão evoluindo além dos gerentes de TI profissionais. Por um lado nós estamos passando por um momento onde até os melhores operadores estão se esforçando: sistemas estão mudando muito rapidamente para que as pessoas possam acompanhar esta mudança. Por outro lado, a grande massa de computadores eventualmente terminará em ambientes não gerenciados que as pessoas possuem, levam com elas ou têm em seu carro e sua casa.

Nós temos portanto que tornar mais fácil para as pessoas fazer com que a coisa certa aconteça de forma consistente com intervenção humana mínima. Nós temos que trabalhar em direção a um ponto onde os tomadores de decisão possam definir uma política e tê-la implantada em máquinas sem esforço diário significativo em escrever programas, acionar alavancas e apertar botões nos consoles dos administradores.

A indústria pode endereçar isto de várias formas. Nós deveríamos na verdade escrever software de uma forma completamente diferente? Nós realmente deveríamos ter administradores de sistema? Ou nós deveríamos estar desenvolvendo máquinas aptas a administrar outras máquinas sem intervenção humana rotineira?

Programação

Ferramentas

Cada uma destas abordagens requer novas classes de software. Conforme o número absoluto e a complexidade das máquinas crescem, o problema de administração sobrepõe a disponibilidade e capacidade do pessoal treinado.

O resultado é que as pessoas na comunidade de ferramentas de administração têm que passar a pensar em desenvolver formas melhores de escrever programas. As pessoas que historicamente pensam em como gerenciar computadores vão ter que passar a pensar em como os computadores podem ser mais auto-organizados e autogerenciados.

Nós temos que continuar a melhorar as ferramentas de programação, pois a programação atualmente é muito suscetível a erro. Mas as ferramentas atuais não suportam adequadamente o processo devido ao número de camadas de administração que requerem gerenciamento básico. Em outras palavras, o projetista não pode se preocupar somente com problemas de arquitetura de sistema e plataforma/biblioteca, mas também com tudo relativo a performance, atualização e gerenciamento de estruturas de dados, multithreading e gerenciamento de memória. Há pouco suporte de programação em paralelo, grande parte das estruturas de controle é construída seqüencialmente e todo o processo é dolorosamente seqüencial. E isto falando somente do desenvolvimento; no nível de implantação é inacreditavelmente difícil testar interações complexas de sistemas, versões e a enorme gama de ambientes de implantação. Há também uma difusão crescente de ferramentas que oferecem funcionalidade avançada de desenvolvimento para uma população mais ampla, mas não ajudam os usuários iniciantes ou sem experiência a escrever código bom. Também há problemas relativos a perspectivas de longo prazo: por exemplo, ferramentas não suportam tendências que mudam da noite para o dia ou em constante mutação em capacidade, armazenamento, velocidade e assim por diante. Lembre do enorme esforço devotado ao bug do ano 2000 porque os programadores da década de 60 e 70 não esperavam que o seu código ainda estivesse em uso em máquinas bem superiores em capacidade às máquinas daquela era.

Interoperabilidade

O crescimento da Internet foi prova de que tecnologias interoperáveis – do TCP/IP ao HTTP – são criticas para a construção de sistemas computacionais de larga escala e múltiplos propósitos que as pessoas consideram úteis e atraentes. (De forma similar, padrões interoperáveis, reforçado pela tecnologia, política ou ambos, direcionarão o sucesso de muitas outras tecnologias, de estradas de ferro à televisão.) É obvio e inevitável que sistemas interoperáveis direcionarão a computação ainda por um bom tempo.

Mas a interoperabilidade apresenta um conjunto único de problemas para a indústria, em termos de tecnologias, políticas e práticas de negócio. Sistemas computacionais “confiáveis” atuais, tais como a rede de controle de tráfego aéreo, são muito complexos e altamente interdependentes, mas também são projetados para um propósito específico, raramente modificados e estritamente controlados por uma autoridade central. A dúvida é se um sistema computacional distribuído, fracamente organizado, flexível e dinâmico – dependente de tecnologias interoperáveis – pode sequer atingir o mesmo nível de confiabilidade.

A interoperabilidade também é um problema em termos de responsabilização e confiança, pelo fato de que a responsabilidade pelos problemas é mais difícil de assinalar. Se a Internet de hoje – construída sobre o principio da descentralização e gerenciamento coletivo – passasse por algum tipo de falha massiva, quem seria responsabilizado? A principal razão pela qual as pessoas estão relutantes em confiar na Internet é que elas não conseguem identificar facilmente quem é responsável por suas falhas – quem deveria ser responsabilizado por uma falha de rede catastrófica ou pelo colapso do Domain Name System? Se nós vamos criar e nos beneficiar de um sistema interoperável massivo (e interdependente) no qual as pessoas podem confiar, nós devemos desenhar claramente as linhas de quem é responsável pelo que.

Modelos Conceituais

Nós enfrentamos um problema fundamental na computação confiável: a ciência da computação não possui um framework teórico. A segurança do computador – por si só um componente da computação confiável – tem sido amplamente tratada como um desdobramento da segurança das comunicações, que é baseada na criptografia. A criptografia possui uma sólida base matemática, mas é claramente inadequada para endereçar os problemas dos sistemas confiáveis. Como disse o pesquisador da Microsoft Jim Kajiya, “É como se nós estivéssemos construindo máquinas de vapor sem entender de termodinâmica”. A comunidade da ciência de computação ainda não identificou um paradigma alternativo; nós estamos presos na criptografia. Pode haver pesquisa em combinatória computacional, ou um tipo diferente de teoria da informação que procure estudar a natureza básica da transferência de informação, ou pesquisa sobre o fenômeno cooperativo na computação, que pode eventualmente formar parte de uma alternativa. Mas atualmente isto é somente uma especulação.

Um sistema computacional é somente tão confiável quanto seu link mais fraco. O link mais fraco também é freqüentemente um humano: uma pessoa produzindo um projeto pobre em face à complexidade encontrada, um administrador configurando um sistema de forma incorreta, uma pessoa de negócio escolhendo entregar recursos ao invés de confiabilidade ou um técnico de suporte sendo vitima de impostores através de um golpe de “engenharia social”. A interação entre tecnologia e sociologia será uma área de pesquisa crítica para a computação confiável. Até agora quase não há nenhuma conexão entre estes campos.

Resumo

Entregar computação confiável é essencial não somente para a saúde da indústria dos computadores, mas também para a nossa economia e sociedade como um todo.

Computação confiável é um conjunto multidimensional de tópicos. Todos eles giram em torno de três objetivos: segurança, confiabilidade e integridade de negócio. Cada um deles demanda atenção.

Embora trabalho importante em curto prazo tenha que ser realizado, problemas difíceis que requerem pesquisa fundamental e avanços na engenharia ainda permanecerão.

As empresas de hardware e software, assim como as instituições de pesquisa acadêmica e governamental precisam adiantar-se ao desafio de resolver estes problemas.


Início da páginaInício da página